私はちょうどNLTKを使い始めており、テキストから単語のリストを取得する方法はあまりよく分かりません。 nltk.word_tokenize()
を使用すると、単語と句読点のリストが表示されます。代わりに言葉だけが必要です。どのようにして句読点を取り除くことができますか?また、word_tokenize
は複数の文章では機能しません。最後の単語にドットが追加されます。NLTK tokenizerを使用して句読点を取り除くにはどうすればよいですか?
答えて
コメントで気付いたのは、sent_tokenize()で始まります。なぜなら、word_tokenize()は単一の文でのみ機能するからです。 filter()で句読点を除外することができます。また、Unicode文字列を持っている場合は、Unicodeオブジェクトであることを確認してください( 'utf-8'のようなエンコーディングでエンコードされた 'str'ではありません)。
from nltk.tokenize import word_tokenize, sent_tokenize
text = '''It is a blue, small, and extraordinary ball. Like no other'''
tokens = [word for sent in sent_tokenize(text) for word in word_tokenize(sent)]
print filter(lambda word: word not in ',-', tokens)
Penn Treebankトークナイザに含まれる複雑さのほとんどは、句読点の適切な処理に関係しています。句読点を取り除くだけの場合は、句読点を扱う高価なトークナイザを使用するのはなぜですか? – rmalouf
'word_tokenize'は、' [_treebank_word_tokenize(sent)]にトークンのためにsent_tokenize(text、language)で送られたトークン 'を返す関数です。 あなたの答えはすでにnltkがしていることをしていると思います: 'word_tokenize()'を使う前に 'sent_tokenize()'を使ってください。 少なくともこれはnltk3用です。 –
@rmaloufあなたは句読点だけのトークンを必要としないので?したがって、 'did'と' n't'ではなく '.'を指定します。 –
nltkが提供する他のトークン化オプションについては、hereを参照してください。たとえば、トークンとして英数字のシーケンスを選ぶと他のすべてをドロップトークナイザを定義することができます。
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r'\w+')
tokenizer.tokenize('Eighty-seven miles to go, yet. Onward!')
出力:私は、次のコードを使用
['Eighty', 'seven', 'miles', 'to', 'go', 'yet', 'Onward']
このオプションを使用すると、収縮を分割するような' word_tokenize'に特有の自然言語機能が失われることに注意してください。 NLTKを必要とせずに、正規表現 '\ w +'を素直に分割することができます。 – sffc
、すべての句読点を削除:
tokens = nltk.wordpunct_tokenize(raw)
type(tokens)
text = nltk.Text(tokens)
type(text)
words = [w.lower() for w in text if w.isalpha()]
なぜトークンをテキストに変換するのですか? – Sadik
私は句読点を削除するには、このコードを使用します。
import nltk
def getTerms(sentences):
tokens = nltk.word_tokenize(sentences)
words = [w.lower() for w in tokens if w.isalnum()]
print tokens
print words
getTerms("hh, hh3h. wo shi 2 4 A . fdffdf. A&&B ")
そして、あなたはトークンが有効な英語の単語であるかどうかを確認したい場合は、PyEnchant
チュートリアル必要があるかもしれません:あなたは本当に句読点を削除するNLTKを必要としない
import enchant
d = enchant.Dict("en_US")
d.check("Hello")
d.check("Helo")
d.suggest("Helo")
この解決策は収縮を殺すことに注意してください。これは、 'word_tokenize'が標準的なトークナイザである' TreebankWordTokenizer'を使用して、収縮を分割しているからです(例えば 'can't'を(' ca'、 'n't')に変換しますが、' n't'は英数字ではなく、 –
を。シンプルなPythonでそれを削除することができます。
import string
s = '... some string with punctuation ...'
s = s.translate(None, string.punctuation)
またはUnicode用:
import string
translate_table = dict((ord(char), None) for char in string.punctuation)
s.translate(translate_table)
、その後、あなたのトークナイザで、この文字列を使用した文字列の場合。
P.S.文字列モジュールには、(数字のような)削除可能な要素がいくつかあります。
私はあなたが(次のコードは、Python 3である)に一致する正規表現のいくつかの並べ替えが必要だと思う:
import string
import re
import nltk
s = "I can't do this now, because I'm so tired. Please give me some time."
l = nltk.word_tokenize(s)
ll = [x for x in l if not re.fullmatch('[' + string.punctuation + ']+', x)]
print(l)
print(ll)
出力:それは句読点を削除するので
['I', 'ca', "n't", 'do', 'this', 'now', ',', 'because', 'I', "'m", 'so', 'tired', '.', 'Please', 'give', 'me', 'some', 'time', '.']
['I', 'ca', "n't", 'do', 'this', 'now', 'because', 'I', "'m", 'so', 'tired', 'Please', 'give', 'me', 'some', 'time']
は、ほとんどの場合うまく動作するはずwordpunct_tokenize
のような正規表現のトークナイザからは得られない "not"のようなトークンを保存します。
以下のコードでは、すべての句読記号とアルファベット以外の文字が削除されます。彼らの本からコピーされました。
http://www.nltk.org/book/ch01.html
import nltk
s = "I can't do this now, because I'm so tired. Please give me some time. @ sd 4 232"
words = nltk.word_tokenize(s)
words=[word.lower() for word in words if word.isalpha()]
print(words)
出力
['i', 'ca', 'do', 'this', 'now', 'because', 'i', 'so', 'tired', 'please', 'give', 'me', 'some', 'time', 'sd']
この方法を使うと、 "できない"や "しない"のような文では、文を理解して分類する上で非常に重要な場合があります。 sentence.translate(string.maketrans( ""、 ""、)、chars_to_remove)を使用して、chars_to_removeは "。、 ': – MikeL
- 1. 未読データを取り除くにはどうすればよいですか?
- 2. パイソン - キーワード読み取りプログラム、トラブル取り除く句読点
- 3. Python - NLTK句読点区切り
- 4. Firebaseデータベースで句読点を使用するにはどうすればよいですか?
- 5. Javaの入力テキストから句読点を削除するにはどうすればよいですか?
- 6. Cのスペルチェックプログラムで句読点を削除するにはどうすればよいですか?
- 7. jQuery:if文を使用して「未定義」エラーを取り除くにはどうすればよいですか
- 8. Plotlyを使用してデフォルトのツールチップを取り除くにはどうすればよいですか?
- 9. Perlを使用して文字列のHTMLを取り除くにはどうすればよいですか?
- 10. 文字列のすべてのスペースと句読点を取り除くにはどうすればいいですか? (Python)
- 11. xmlを正しく読み込んでSimpleXMLElementを取り除くにはどうすればいいですか?
- 12. カントが分かります! (マップから句読点を取り除く)
- 13. ProcessingでNullPointerExceptionを取り除くにはどうすればよいですか?
- 14. spaCyを使用して句読点を削除する。現在
- 15. sedを使用して句読点とタブを削除する
- 16. このエラーを取り除くにはどうすればよいですか?
- 17. NULLセグメンテーションフォルトを取り除くにはどうすればよいですか?
- 18. SOAP Envelopeを取り除くにはどうすればよいですか?
- 19. このデッドロックを取り除くにはどうすればよいですか?
- 20. このエラーを取り除くにはどうすればよいですか?
- 21. このセグメンテーションエラーを取り除くにはどうすればよいですか?
- 22. RETURN文を取り除くにはどうすればよいですか?
- 23. パンダのカラムから句読点を削除しようとしています
- 24. Javaで単一の単語に続くすべての句読点を削除するにはどうすればよいですか?
- 25. NLTKライブラリをchatterbotにリンクしてSentimentComparisonを使用するにはどうすればよいですか?
- 26. RegExを使用してJava文字列から - と_を除くすべての句読点を削除する
- 27. C#ListView、View = List - 下の未使用領域を取り除くにはどうすればよいですか?
- 28. ハイチャートでラインラベルを取り除くにはどうすればいいですか?
- 29. 古いLocalizable.stringsを取り除くにはどうすればいいですか?
- 30. NLTKを使用して解析ツリーを生成するにはどうすればよいですか?
は、なぜあなたは句読点自分自身を削除していませんか? 'nltk.word_tokenize(the_text.translate(None、string.punctuation))'はpython2で動作するはずですが、python3では 'nltk.work_tokenize(the_text.translate(dict.fromkeys(string.punctuation))')を実行できます。 – Bakuriu
これは動作しません。テキストは何も起こりません。 – lizarisk
NLTKが想定しているワークフローは、まず文にトークン化し、すべての文を単語にトークン化することです。そのため、 'word_tokenize()'は複数の文では動作しません。句読点を取り除くには、正規表現やPythonの 'isalnum()'関数を使うことができます。 –