2016-05-21 13 views
6

moje dane:przechwytywania skomplikowane nazwy

Caterina Guonçallvez braçeyro 
Francisco Ro[dr]í[gueJz luveyro 
Johao de Miranda calçeteyro 
Lucas Martinz Mal-Cuzinhado, braçeyro 
Francisquo d[e] Arruda braçeyro 
Francisquo de Miranda braçeyro 

-pierwsze Nazwisko
-pierwsze imię nazwisko z brakets i J (brakets OCR Recognition)
-pierwsze Nazwisko z myślnikiem
-pierwsze nazwisko z cząstek
-pierwsze nazwisko z cząstką z brakets

oczekiwany wynik

Caterina Guonçallvez 
Francisco Ro[dr]í[gueJz 
Johao de Miranda 
Lucas Martinz Mal-Cuzinhado 
Francisquo d[e] Arruda 
Francisquo de Miranda 
  • Nazwy są Początki z uppercases

  • Ostatnia część nazwy następuje przestrzeni (lub przecinek z miejsca), a słowo zaczynające się od małej charakterze jak „braçeyro” lub „calçeteyro "(Praca ludzi)

    danych < - readlines (" schowka”, kodowanie = "latin1")

co starałem:

^([a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð])\w+[A-Z ,.'-]\w+ 

dając
Antonio Guomez
Caterina Guon
Francisco Ro
Johao de
Francisquo d

+0

można wkleić oczekiwanego wyjście? Ponieważ nie wiem, jak się nazywa. Mamy proste nazwisko w Indiach. – khrm

+0

Użyłbym 'str_extract (s," \\ p {Lu} [\\ w \\] \\ [-] * (?: (?: \\ s + d \\ [? E \\]?)? \\ s + \\ p {Lu} [\\ w \\] \\ [-] *) * ")', jest liniową wersją zaakceptowanej odpowiedzi (dlatego jest szybsza), a także dopasowuje nazwy zaczynające się od dowolna wielka litera. –

Odpowiedz

6

Wzór (([A-Z][\w\[\]-]+|de|d\[e\])\s?)+ powraca:

'Caterina Guonçallvez ' 
'Francisco Ro[dr]í[gueJz ' 
'Johao de Miranda ' 
'Lucas Martinz Mal-Cuzinhado' 
'Francisquo d[e] Arruda ' 
'Francisquo de Miranda ' 

Zakłada ustawić lokalny e poprawnie.

Wyrażenie dopasowuje grupy liter (i myślniki), począwszy od wielkich liter lub "de", a następnie opcjonalne spacje. Oznacza to, że musisz usunąć paski, aby usunąć końcowe spacje.


edit: Dowód działa w R:

> Sys.setlocale("LC_ALL","en_us.UTF-8") 
> library(stringr) 
> x <- "Caterina Guonçallvez braçeyro " 
> str_match(x, '(([A-Z][\\w\\[\\]-]+|de|d\\[e\\])\\s?)+') 
    [,1]     [,2]   [,3]   
[1,] "Caterina Guonçallvez " "Guonçallvez " "Guonçallvez" 
+0

Dobrze, świetnie! 'Francisco Ro [dr] í [gueJz luveyro'jak zawiera znaki diakrytyczne i akcenty? – Wilcar

+0

Och, zapomniałem dołączyć nawiasy w zestawie znaków. Akcenty powinny działać automatycznie, jeśli masz odpowiedni zestaw ustawień regionalnych, od sposobu, w jaki to zrozumiałem. Niestety błędnie przeczytałem twoje pytanie i nie widziałem tagu 'r', więc zrobiłem to w Pythonie (gdzie jest prosta flaga' re.UNICODE'), ale według [this] (http: //astrostatistics.psu. edu/su07/R/html/base/html/regex.html) powinno działać, jeśli masz odpowiednie ustawienia regionalne. – L3viathan

+0

Używam regexR do testowania wzorca. Nie działa w pełni w R – Wilcar

Powiązane problemy