2017-05-26 1 views
0

Ich bin textacy 's pos_regex_matches Methode, um bestimmte Stücke von Text in Sätzen zu finden.Passende PoS Tags mit bestimmten Text mit `testacy.extract.pos_regex_matches (...)`

Zum Beispiel, wenn ich den Text habe: Huey, Dewey, and Louie are triplet cartoon characters., würde ich gerne feststellen, dass Huey, Dewey, and Louie eine Aufzählung ist.

so zu tun, verwende ich den folgenden Code (auf testacy 0.3.4, die Version zum Zeitpunkt des Schreibens verfügbar):

import textacy 

sentence = 'Huey, Dewey, and Louie are triplet cartoon characters.' 
pattern = r'<PROPN>+ (<PUNCT|CCONJ> <PUNCT|CCONJ>? <PROPN>+)*' 
doc = textacy.Doc(sentence, lang='en') 
lists = textacy.extract.pos_regex_matches(doc, pattern) 
for list in lists: 
    print(list.text) 

die druckt:

Huey, Dewey, and Louie 

Allerdings, wenn ich etwas haben, wie folgt aus:

sentence = 'Donald Duck - Disney' 

dann die - (Bindestrich) ist erkannt als <PUNCT> und der ganze Satz wird als Liste erkannt - was nicht der Fall ist.

Gibt es eine Möglichkeit anzugeben, dass nur , und ; für Listen <PUNCT> gültig sind?

Ich habe nach einer Referenz über diese Regex-Sprache für passende PoS-Tags ohne Glück gesucht, kann jemand helfen? Danke im Voraus!

PS: Ich habe versucht, <PUNCT|CCONJ> mit <[;,]|CCONJ>, <;,|CCONJ>, <[;,]|CCONJ>, <PUNCT[;,]|CCONJ>, <;|,|CCONJ> und <';'|','|CCONJ> wie in den Kommentaren vorgeschlagen zu ersetzen, aber es hat nicht funktioniert ...

+0

Ersetzen Sie punct mit [,;] –

Antwort

1

kurz ist, ist es nicht möglich ist: siehe this official page.

jedoch die Zusammenführung Anfrage den Code der modifizierten Version der Seite beschrieben enthält, deshalb kann man die Funktionalität neu erstellen, obwohl es weniger leistungs ist als die Verwendung einer SpaCy ‚s Matcher (siehe code und example - obwohl ich keine Ahnung habe, wie man mein Problem mit einem Matcher neu zu implementieren.

Wenn Sie diese Spur sowieso gehen wollen, müssen Sie die Zeile:

words.extend(map(lambda x: re.sub(r'\W', '', x), keyword_map[w])) 

mit dem folgenden:

words.extend(keyword_map[w]) 

sonst jedes Symbol (wie , und ; in meinem Fall) wird abgestreift werden.

Verwandte Themen