web-dev-qa-db-ja.com

POSタギングとレマタイザー用の多言語NLTK

最近、私はNLPにアプローチし、テキストの分析に [〜#〜] nltk [〜#〜] および TextBlob を使用しようとしました。旅行者のレビューを分析するアプリを開発したいので、さまざまな言語で書かれた多くのテキストを管理する必要があります。品詞タグ付けと品詞化という2つの主要な操作を行う必要があります。 NLTKでは、次のような文のトークン化に適切な言語を選択する可能性があることを確認しました。

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

POSタギングとレマタイザーの言語を異なる言語で設定する正しい方法をまだ見つけていません。イタリア語、フランス語、スペイン語、ドイツ語などの英語以外のテキストに正しいコーパス/辞書を設定するにはどうすればよいですか?また、「TreeBank」または「WordNet」モジュールをインポートする可能性があることもわかりましたが、それらの使用方法がわかりません。それ以外の場合、それぞれのコーパスはどこにありますか?

提案や参考資料を教えてください。私はNLTKの専門家ではないことに注意してください。

どうもありがとう。

12

別の多言語POSタガーをお探しの場合は、 RDRPOSTagger :POSおよび形態学的タグ付け用の堅牢で使いやすく言語に依存しないツールキットをお試しください。 このペーパー の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を使用してプログラミングする場合は、pSCRDRTaggerパッケージのRDRPOSTagger.pyモジュールのコード行92〜98に従ってください。次に例を示します。

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 . ")
6
NQD

NLTKの品詞タグ付けおよび品詞タグ付け関数に渡して他の言語を処理させるオプションはありません。

1つの解決策は、各言語のトレーニングコーパスを取得し、NLTKを使用して独自のPOSタガーをトレーニングしてから、各言語の辞書ベースのレンマ化ソリューションを見つけることです。

ただし、イタリア語、フランス語、スペイン語、ドイツ語(および他の多くの言語)の両方のタスクに対してシングルストップソリューションがすでに存在するため、それはやり過ぎかもしれません: TreeTagger 。これは、英語のPOSタガーやレンマタイザーほど最先端ではありませんが、それでもうまく機能します。

必要なのは、システムにTreeTaggerをインストールし、Pythonから呼び出すことができるようにすることです。これが miottoによるGitHubリポジトリ これでそれが可能になります。

次のスニペットは、すべてが正しく設定されていることをテストする方法を示しています。ご覧のとおり、1回の関数呼び出しでPOSタグを付けてレンマ化することができ、英語でもフランス語でも同じように簡単に行うことができます。

>>> 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)、私はこの問題に関するブログ投稿を書き、完了したらすぐにこの回答をリンクで更新します。

編集: これが上記のブログ投稿です。

6
HugoMailhot