2016-10-03 3 views
0

Ich versuche, die Kommentare einiger Kunden in Sätze unter Verwendung nltk.sent_tokenize zu teilen. Ich habe bereits versucht, einige der Probleme mit dem folgenden Code zu lösen:Sätze mit nltk.sent_tokenize teilen, liefert kein korrektes Ergebnis

comment = comment.replace('?', '? ').replace('!', '! ').replace('..','.').replace('.', '. ') 

Aber ich weiß nicht, wie die folgenden Probleme zu lösen:

  1. Kunden verwendeten "." nach einigen Sätzen mehr. Zum Beispiel:

    Think tool is a huge factor in this....i have only 
    
  2. Kunden verwendet, um mehr "!" nach einigen Sätzen, wie auditory subject everyday!!!!!

  3. einig sie Kombination von "!" und "." am Ende der Sätze verwendet.

  4. Weil ich schon replace('.', '. ') verwendet, es verursacht auch folgendes Problem:

    Gewicht (20lbs.) gewinnen, wurde aufgeteilt (20lbs.)

Jeder Vorschlag? Ich benutze Python.

+0

Vollständig freier Text ist extrem problematisch, daher ist es unwahrscheinlich, dass ein einziger Satz von statischen Fixes überall funktioniert. Aber die Probleme, die Sie beschreiben, könnten behoben werden, indem Sie wiederholte Interpunktionszeichen auf eine einzige Instanz reduzieren, dann Leerzeichen nachher hinzufügen und dann Leerzeichen entfernen, bevor Sie die Klammern schließen. – tripleee

+0

@tripleee, danke! Können Sie eine Lösung geben, mit der ich die Anzahl der wiederholten Zeichenfolgen reduzieren kann, z. B. "." oder "!". ? – Mary

+1

Einfach genug mit einer Regex. 're (r '([;.::!?]) \ 1+', r '\ 1', 'Hallo ..... wie geht es dir ????')' – tripleee

Antwort

0

Versuchen Sie es mit dem Punkt Sentence Tokenizer. Es ist vortrainiert, Sätze effektiv zu teilen und kann leicht in Ihren Code eingefügt werden.

+0

danke! Ich denke für Punkt Sentence Tokenizer brauche ich sowohl Zugset als auch Testset. Ich habe 220 Kundenkommentare für ein Produkt, schlage ich vor, ich teile den 220 Kommentar zu Training und Testset auf und verwende ihn dann, um Sätze zu trennen? – Mary

+0

@Mary Sie könnten den Punkt Sentence Tokenizer trainieren, wenn Sie möchten, aber Sie könnten auch in einer vortrainierten Version wie folgt pürieren: 'psenttokenizer = nltk.data.load ('tokenizers/punkt/english.pickle')'. Sie könnten dann einfach die Tokenize-Funktion für dieses psenttokenizer-Objekt aufrufen und den Text als Parameter übergeben. – YashTD

Verwandte Themen