Лемматизировать французский текст
У меня есть текст на французском языке, который мне нужно обрабатывать в некотором роде. Для этого мне нужно:
- Сначала выделите текст в слова
- Затем леммитизируйте эти слова, чтобы избежать обработки одного и того же корня более одного раза
Насколько я вижу, wordnet lemmatizer в NLTK работает только с английским. Я хочу что-то, что может вернуть "vouloir", когда я даю ему "voudrais" и так далее. Я также не могу точно обозначить из-за апострофов. Любые указатели будут очень благодарны.:)
Ответы
Ответ 1
Здесь старый, но актуальный комментарий от nltk dev. Похоже, что большинство продвинутых стеммеров в nltk относятся только к английскому:
В настоящее время модуль nltk.stem содержит 3 стеммера: Портер стеммер, ланкастерский стеммер и регулярное выражение на основе парадигматический. Стеммер Портер и Ланкастер стеммер оба English- конкретный. Стеммер на основе регулярных выражений может быть настроен на используйте любое регулярное выражение, какое пожелаете. Таким образом, вы должны быть в состоянии написать простой стеммер для неанглийских языков с использованием регулярного выражения Например, для французского:
from nltk import stem
stemmer = stem.Regexp('s$|es$|era$|erez$|ions$| <etc> ')
Но вам нужно придумать регулярный язык Выражение себя. Для более продвинутого стеммера это, вероятно, необходимо добавить новый модуль. (Это может быть хорошим учеником проект.)
Для получения дополнительной информации о регулярном выражении:
http://nltk.org/doc/api/nltk.stem.regexp.Regexp-class.html
-Edward
Примечание. Ссылка, которую он дает, устарела, см. здесь для ознакомления с текущей документацией по регулярным выражениям.
Похоже, что недавно добавленный снежный ком способен остановить французский. Пусть проверят:
>>> 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'
Как видите, некоторые результаты немного сомнительны.
Не совсем то, на что вы надеялись, но я думаю, это начало.
Ответ 2
Лучшее решение, которое я нашел, - это простота, похоже, она справляется со своей задачей
Для установки:
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
Ответ 3
Может быть, с TreeTagger? Я не пробовал, но это приложение может работать на французском языке
http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/
http://txm.sourceforge.net/installtreetagger_fr.html
Ответ 4
Если вы выполняете алгоритмы машинного обучения для своего текста, вы можете использовать n-граммы вместо слов-токенов. Это не строго лемматизация, но она обнаруживает серии из n одинаковых букв, и удивительно мощно собирать слова с одинаковым значением.
Я использую склеарную функцию CountVectorizer(analyzer='char_wb')
и для некоторого конкретного текста это намного эффективнее, чем мешок слов.
Ответ 5
Если вы работаете над проектом текстового майнинга во французском банке, я рекомендую пакет cltk.
install cltk
from cltk.lemmatize.french.lemma import LemmaReplacer
больше деталей в cltk
Ответ 6
Вы пробовали Леттрию? Это НЛП специализируется на французском языке. https://lettria.com/demo