2017-03-12 4 views
0

Ich mache eine Textanalyse-Aufgabe mit Python. Hier habe ich NLTK für die Textverarbeitungsaufgabe verwendet. Bei mir gibt es einen vordefinierten Satz von biwords, der unten erwähnt wird.Wie man einen Satz mit bekannten biwords mit nltk tokenize?

arr = ['Animo Text Analytics Inc.', 'Amila Iddamalgoda'] 

Und auch ich habe einen Satz wie unten.

sentence = "Amila Iddamalgoda is currently working for Animo Text Analytics Inc. and currently following the Text Mining and Analytics course provided by coursera." 

Jetzt habe ich dies mit NLTK in Tokens.

tokenizer = RegexpTokenizer(r'\w+') 
tokens = tokenizer.tokenize(sentence) 

Dies gibt (offensichtlich) einzelne Wort Token. Was ich jedoch brauche, ist die Übereinstimmung mit dem vordefinierten Satz von Biwörtern, die ich (am Anfang erwähnt) habe, und nehme diese Biword-Pharasen als einzelnes Token.

zB: Amila Iddamalgoda, derzeit arbeiten, Animo Text Analytics Inc., follwoing, ...

Wie kann ich das erreichen? Bitte helfen Sie mir

Antwort

1

Ersetzen Sie alle Räume in jedem Auftreten eines Multi-Wortes in Ihrem Text mit einigen deutlich erkennbaren Zeichen, zum Beispiel eines Unter:

for expr in arr: 
    sentence = re.sub(expr, re.sub(r'\s+', "_", expr), sentence) 
#'Amila_Iddamalgoda is currently working ...' 

Sie können nun „normal“ tokenization tun.

Wenn Sie vermuten, dass es mehr als ein Leerzeichen zwischen den Wörtern im Text ist, erste Liste von regulären Ausdrücken erstellen, die Ihre multi-Wörter entsprechen:

toreplace = {r'\s+'.join(a.split()) : '_'.join(a.split()) for a in arr} 
#{'Amila\\s+Iddamalgoda': 'Amila_Iddamalgoda', 
# 'Animo\\s+Text\\s+Analytics\\s+Inc.': 'Animo_Text_Analytics_Inc.'} 

nun jedes Ersatzmuster auf den ursprünglichen Satz anwenden :

for pattern in toreplace: 
    sentence = re.sub(pattern, toreplace[pattern], sentence) 

Jetzt können Sie wieder "normale" Tokenisierung durchführen.

Die vorgeschlagene Lösung ist ziemlich ineffizient. Wenn die Effizienz wichtig ist, können Sie Ihren eigenen regulären Token-Ausdruck schreiben und nltk.regexp_tokenize() verwenden.