2015-09-23 13 views
8

最近、私はNLPに近づき、テキストの分析にNLTKTextBlobを使用しようとしました。私は旅行者のレビューを分析するアプリを開発したいので、さまざまな言語で書かれたたくさんのテキストを管理する必要があります。私は2つの主要な操作を行う必要があります:POSタギングとlemmatization。私は、異なる言語でのPOSタグ付けとLemmatizerの言語を設定するための正しい方法を発見していないPOSタギングとレムマタイザー用の多言語NLTK

tokenizer = nltk.data.load('tokenizers/punkt/PY3/italian.pickle') 

:私はNLTKで選択、このような文章をトークン化のための右の言語への可能性があると見ていますまだ。イタリア語、フランス語、スペイン語、ドイツ語などの英語以外のテキストに対して正しいコーパス/辞書を設定するにはどうすればよいですか?また、 "TreeBank"や "WordNet"モジュールをインポートする可能性があることもわかりますが、どのように使用できるのか分かりません。それ以外の場合は、それぞれのコーパスをどこで見つけることができますか?

私はいくつかの提案やリファレンスを教えてもらえますか?私はNLTKの専門家ではないことに注意してください。

多くのありがとうございます。

答えて

3

他の言語を処理させるNLTKのPOSタグ付け関数および関数化関数に渡すことはできません。

各言語のトレーニングコーパスを取得し、NLTKを使用して自分のPOS-taggersを訓練し、言語ごとに二語彙ベースの解決策を見つけ出すことが1つの解決策です。

イタリア語、フランス語、スペイン語、ドイツ語(および他の多くの言語)の両方のタスクに対して既に単一の停止ソリューションがあるので、それは残念です。TreeTagger。それは、英語のPOSタガーやレマタイザーと同じくらい最先端の技術ではありませんが、まだまだ良い仕事です。

あなたが望むのは、システムにTreeTaggerをインストールし、Pythonから呼び出せるようにすることです。ここではそれを可能にするGitHub repo by miottoがあります。

次のスニペットは、すべてを正しく設定したことをテストする方法を示しています。ご覧のとおり、私はPOSタグをつけることができ、1つの関数呼び出しでlemmatizeすることができます。英語とフランス語で簡単にやりとりすることができます。

>>> import os 
>>> os.environ['TREETAGGER'] = "/opt/treetagger/cmd" # Or wherever you installed TreeTagger 
>>> from treetagger import TreeTagger 
>>> tt_en = TreeTagger(encoding='utf-8', language='english') 
>>> tt_en.tag('Does this thing even work?') 
[[u'Does', u'VBZ', u'do'], [u'this', u'DT', u'this'], [u'thing', u'NN', u'thing'], [u'even', u'RB', u'even'], [u'work', u'VB', u'work'], [u'?', u'SENT', u'?']] 
>>> tt_fr = TreeTagger(encoding='utf-8', language='french') 
>>> tt_fr.tag(u'Mon Dieu, faites que ça marche!') 
[[u'Mon', u'DET:POS', u'mon'], [u'Dieu', u'NOM', u'Dieu'], [u',', u'PUN', u','], [u'faites', u'VER:pres', u'faire'], [u'que', u'KON', u'que'], [u'\xe7a', u'PRO:DEM', u'cela'], [u'marche', u'NOM', u'marche'], [u'!', u'SENT', u'!']] 

この質問は多くのことを尋ねます(と、インストールプロセスは、スーパーストレートフォワードIMO、ではないので)、私は、問題に関するブログ記事を書いて、できるだけ早くそれへのリンクをこの答えを更新しますので、されているように。

EDIT: Here is the above-mentioned blog post.

4

あなたが別の多言語POSタガーを探しているなら、あなたはRDRPOSTaggerしようとする場合があります:POSおよび形態学的タグ付けのための堅牢で使いやすいと言語に依存しないツールキットを。 this paperの13言語でのパフォーマンスのスピードとタグ付けの精度などの実験結果をご覧ください。 RDRPOSTaggerは、ブルガリア語、チェコ語、オランダ語、英語、フランス語、ドイツ語、ヒンディー語、イタリア語、ポルトガル語、スペイン語、スウェーデン語、タイ語、ベトナム語の事前訓練済みPOSおよび形態学的タグ付けモデルをサポートしています。 RDRPOSTaggerは、40言語用の事前訓練されたユニバーサルPOSタギングモデルもサポートしています。Pythonで

、あなたはとして生の非標識テキストコーパスをタグ付けするため事前に訓練されたモデルを利用することができます

python RDRPOSTagger.py tag PATH-TO-PRETRAINED-MODEL PATH-TO-LEXICON PATH-TO-RAW-TEXT-CORPUS

例:python RDRPOSTagger.py tag ../Models/POS/German.RDR ../Models/POS/German.DICT ../data/GermanRawTest

あなたはRDRPOSTaggerでプログラムしたい場合は、してくださいRDRPOSTagger.pyモジュール内のコード行92-98をpSCRDRTaggerパッケージに従ってください。ここに例があります:

r = RDRPOSTagger() 
r.constructSCRDRtreeFromRDRfile("../Models/POS/German.RDR") #Load POS tagging model for German 
DICT = readDictionary("../Models/POS/German.DICT") #Load a German lexicon 
r.tagRawSentence(DICT, "Die Reaktion des deutschen Außenministers zeige , daß dieser die außerordentlich wichtige Rolle Irans in der islamischen Welt erkenne .") 

r = RDRPOSTagger() 
r.constructSCRDRtreeFromRDRfile("../Models/POS/French.RDR") # Load POS tagging model for French 
DICT = readDictionary("../Models/POS/French.DICT") # Load a French lexicon 
r.tagRawSentence(DICT, "Cette annonce a fait l' effet d' une véritable bombe . ") 
+0

私はタイのためにこのタガーを試していましたが、うまくいきません。それは私にNCNMとして長い文字列を与えます。代わりにトークン列を取らなければならないのですか? – aceminer

+0

はい、タガーを使用する前に、タイ語の単語分割を実行する必要があります。 – NQD