私はPythonを使ってnltkを学んでいます。いろいろな文章で pos_tag をやってみました。しかし、得られた結果は正確ではありません。結果を即興で処理するにはどうすればよいですか?
broke = NN
flimsy = NN
crap = NN
また、NN として分類されている余分な単語がたくさんあります。これらを除外してより良い結果を得るにはどうすればよいですか?
私はPythonを使ってnltkを学んでいます。いろいろな文章で pos_tag をやってみました。しかし、得られた結果は正確ではありません。結果を即興で処理するにはどうすればよいですか?
broke = NN
flimsy = NN
crap = NN
また、NN として分類されている余分な単語がたくさんあります。これらを除外してより良い結果を得るにはどうすればよいですか?
コンテキストを指定すると、これらの結果が得られました。例として、コンテキスト フレーズ「They break climsy crap」で pos_tag を使用して他の結果を取得しています。
import nltk
text=nltk.word_tokenize("They broke flimsy crap")
nltk.pos_tag(text)
[('They', 'PRP'), ('broke', 'VBP'), ('薄っぺらな', 'JJ'), ('がらくた', 'NN')]
とにかく、多くの単語が誤って 'NN' として分類されていると思われる場合は、'NN' とマークされている単語に特別に別の手法を適用できます。たとえば、適切なタグ付きコーパスをいくつか取得し、トリグラム タガーで分類できます。(実際には、著者がhttp://nltk.googlecode.com/svn/trunk/doc/book/ch05.htmlでバイグラムを使用して行うのと同じ方法で)。
このようなもの:
pos_tag_results=nltk.pos_tag(your_text) #tagged sentences with pos_tag
trigram_tagger=nltk.TrigramTagger(tagged_corpora) #build trigram tagger based on your tagged_corpora
trigram_tag_results=trigram_tagger(your_text) #tagged sentences with trigram tagger
for i in range(0,len(pos_tag_results)):
if pos_tag_results[i][1]=='NN':
pos_tag_results[i][1]=trigram_tag_results[i][1]#for 'NN' take trigram_tagger instead
それがあなたの結果を改善するかどうか教えてください。