web-dev-qa-db-ja.com

フランス語のテキストをLemmatize

いくつかの方法で処理する必要のあるフランス語のテキストがあります。そのために、私はする必要があります:

  • まず、テキストを単語にトークン化します
  • 次に、同じルートを複数回処理しないように、それらの単語を見出し語化します。

私が見る限り、NLTKのwordnet lemmatizerは英語でのみ機能します。 「voudrais」などを与えると「vouloir」が返ってくるものが欲しいです。また、アポストロフィが原因で適切にトークン化できません。どんなポインタでも大歓迎です。 :)

25
yelsayed

ここ は、nltk開発者による古いが関連するコメントです。 nltkの最も高度なステマーはすべて英語固有のようです。

Nltk.stemモジュールには現在、Porterステマー、Lancasterステマー、および正規表現ベースのステマーの3つのステマーが含まれています。 PorterステマーとLancasterステマーはどちらも英語固有です。正規表現ベースのステマーは、任意の正規表現を使用するようにカスタマイズできます。したがって、正規表現ステマーを使用して、英語以外の言語用の単純なステマーを作成できるはずです。たとえば、フランス語の場合:

from nltk import stem
stemmer = stem.Regexp('s$|es$|era$|erez$|ions$| <etc> ')

ただし、言語固有の正規表現を自分で作成する必要があります。より高度なステマーの場合、おそらく新しいモジュールを追加する必要があります。 (これは良い学生プロジェクトかもしれません。)

正規表現ステマーの詳細については、以下をご覧ください。

http://nltk.org/doc/api/nltk.stem.regexp.Regexp-class.html

-エドワード

注:彼が提供するリンクは無効です。現在の正規表現のドキュメントについては、 ここ を参照してください。

最近追加された Snowballステマー はフランス語をステミングできるようです。それをテストしてみましょう:

>>> from nltk.stem.Snowball import FrenchStemmer
>>> stemmer = FrenchStemmer()
>>> stemmer.stem('voudrais')
u'voudr'
>>> stemmer.stem('animaux')
u'animal'
>>> stemmer.stem('yeux')
u'yeux'
>>> stemmer.stem('dors')
u'dor'
>>> stemmer.stem('couvre')
u'couvr'

ご覧のとおり、一部の結果は少し疑わしいものです。

あなたが望んでいたものではありませんが、それは出発点だと思います。

17
Junuxx

私が見つけた最良の解決策はスペイシーです、それは仕事をするようです

インストールするには:

pip3 install spacy
python3 -m spacy download fr_core_news_md

使用するには:

import spacy
nlp = spacy.load('fr_core_news_md')

doc = nlp(u"voudrais non animaux yeux dors couvre.")
for token in doc:
    print(token, token.lemma_)

結果:

voudrais vouloir
non non
animaux animal
yeux oeil
dors dor
couvre couvrir

詳細については、ドキュメントをチェックアウトしてください: https://spacy.io/models/fr && https://spacy.io/usage

8
karimsaieh

たぶんTreeTaggerで?私は試していませんが、このアプリはフランス語で動作します

http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/
http://txm.sourceforge.net/installtreetagger_fr.html

2
Klemm

テキストで機械学習アルゴリズムを実行している場合は、Wordトークンの代わりにn-gramを使用できます。厳密に見出し語化ではありませんが、n個の類似した文字のシリーズを検出し、同じ意味の単語を集めることは驚くほど強力です。

私はsklearnの関数CountVectorizer(analyzer='char_wb')を使用していますが、特定のテキストについては、単語の袋よりもはるかに効率的です。

1
Brice

フランスの銀行でテキストマイニングプロジェクトを行っている場合は、パッケージcltkをお勧めします。

install cltkfrom cltk.lemmatize.french.lemma import LemmaReplacer

詳細については cltk

0
Z.LI