Maciej B.

Maciej B. Doktorant

Temat: Szukanie wyrażenia/frazy w tekście

Witam,

mam następujący problem.

Chce w tekście znaleźć frazy, które rozpoczynają się "title:" lub "url:" ale tekst następujący po tych frazach składa się z liter, cyfr, znaków interpunkcyjnych i spacji a do tego mogą być za każdym razem innej długości.

Przykładowo:

title:"Mieszkanie na sprzedaż - Poznań, Grunwald, Krauthofera, 42m2",
address:"Poznań, Krauthofera",
img:"http://m.onet.pl/_m/60528da8ed8f4fd533d473f44fce059e,2,59.jpg",
url:"166332576,mieszkanie,Mieszkanie_na_sprzedaz_-_Poznan__Grunwald__Krauthofera__42m2,ogloszenie.html",

a wynikiem ma być lista:

"title: <tytuł1>" "title:<tytuł2>" itd.
"url: <url1>" "url:<url2>" itd.

a o to kod z tymi danymi:


x<-"SearchPoisCollection.push({\n type:\"nier\", \n iconUrl:\"/_d/poi_graphics/ogloszenia_icon.swf\", \n id:\"166404184\", \n x:\"16.8904\", \n y:\"52.3914\", \n kind:\"mieszkanie\", \n accurate:\"ulica\", \n title:\"Mieszkanie na sprzedaĹĽ - PoznaĹ„, GĂłrczyn, Jarochowskiego, 52m2\", \n address:\"PoznaĹ„, Jarochowskiego\", \n img:\"http://m.onet.pl/_m/669f9004d8991418e71740aca03233b7,2,59.jpg\",\n url:\"166404184,mieszkanie,Mieszkanie_na_sprzedaz_-_Poznan__Gorczyn__Jarochowskiego__52m2,ogloszenie.html\", \n area:\"52 m²\", \n price:\"275 000 zĹ‚\", \n isinnote:\"0\"\n });SearchPoisCollection.push({\n type:\"nier\", \n iconUrl:\"/_d/poi_graphics/ogloszenia_icon.swf\", \n id:\"166146962\", \n x:\"16.8874\", \n y:\"52.3873\", \n kind:\"mieszkanie\", \n accurate:\"ulica\", \n title:\"Mieszkanie na sprzedaĹĽ - PoznaĹ„, GĂłrczyn, KuĹşnicza, 63m2\", \n address:\"PoznaĹ„, KuĹşnicza\", \n img:\"http://m.onet.pl/_m/3af28770c56ea9b13d6977981a8cc44b,2,59.jpg\",\n url:\"166146962,mieszkanie,Mieszkanie_na_sprzedaz_-_Poznan__Gorczyn__Kuznicza__63m2,ogloszenie.html\", \n area:\"63 m²\", \n price:\"319 000 zĹ‚\", \n isinnote:\"0\"\n });"


Wiem jak mogę określić długość występowania danego wyrażenia ale nie wiem jak mogę zapisać w wyrażeniach regularnych wszystkie możliwe znaki, które występują do przecinka kończącego daną linię.

Napisałem coś takiego:


library(stringr)

#dla id
idiki<-str_extract_all(x,'id:\\"\\d{1,}')

#dla wsp geograficznych
iks<- str_extract_all(x,'x:\\"\\d{2}\\.\\d{1,}')
igrek<- str_extract_all(x,'y:\\"\\d{2}\\.\\d{1,}')

#typ
typ<-str_extract_all(x,'kind:\\"[[:alnum:]]{1,}')

#a teraz ta część, którą nie wiem jak zapisać

title<-str_extract_all(x,'title:\\"[[:alnum:]]{1,}')



próbowałem również kombinować z:


title<-str_extract_all(x,'title:\\"(([[:alnum:]]){1,}(\\s){1,}){1,}') ## i tak dalej


######### EDIT#########

#próbowałem jeszcze:
title<-str_extract_all(x,'title:\\"[[:print:]]{1,}'


ale takie rozwiązanie możne nie działać dla różnych znaków, które pojawiają się po dwukropku.

Z góry dziękuję za pomoc :)

pozdr,
MBMaciej B. edytował(a) ten post dnia 22.02.12 o godzinie 18:33
Maciej B.

Maciej B. Doktorant

Temat: Szukanie wyrażenia/frazy w tekście

Witam,

udało się to obejść, w związku z tym, że ta część danych pochodzi z JavaScript jest do tego oddzielny pakiet RJSONIO.

o to kod:


library(RJSONIO)

x<-unlist(strsplit(x,'SearchPoisCollection.push\\('))
x<-x[-which(nchar(x)<300)]

if ( length(which(nchar(x)>1500))!=0 ){
x<-x[-which(nchar(x)>1500)]
}

x<-unlist(strsplit(x,'\\);'))
aa<-lapply(x,fromJSON)
aa<-do.call('cbind',aa)
rownames(aa)<-NULL



Sorry za zaśmiecanie forum ale nie dawało mi to spokoju :)Maciej B. edytował(a) ten post dnia 22.02.12 o godzinie 19:23

Temat: Szukanie wyrażenia/frazy w tekście

A może coś takiego?

str_match_all(x, "(url|title):(.*?),\\n")


Dostajesz elegacką tablicę, z której możesz łatwo wyciągnąć wszystkie potrzebne informacje :-)
Wada tego rozwiązania: przeszukiwany ciąg musi być zakończony znakiem końca linii (nie udało mi się zmusić eRa, żeby traktował końce linii jako "$").

Następna dyskusja:

Szukanie pozycji elemntu w ...




Wyślij zaproszenie do