Вот моя функция, которая должна лемматизировать список предложений, но на выходе получается список всех слов, но не список каждого лемматизированного предложения.
Код для функции лемматизации
tagger = treetaggerwrapper.TreeTagger(TAGLANG='fr')
def lemmatize(corpus):
lemmatize_list_of _sentences= []
lemmatize_list_of _sentences2 = []
for sentence in corpus:
tags = tagger.tag_text(sentence)
tags2 = treetaggerwrapper.make_tags(tags, allow_extra = True)
lemmatize_list_of_sentences.append(tags2)
print(lemmatize_list_of_sentences)
for subl in lemmatize_list_of_sentences: # loop in list of sublists
for word in subl:
if word.__class__.__name__ == "Tag":
lemme=word[2] # I want also to check if lemme[2] is empty and add this
lemmeOption2=lemme.split("|")
lemme=lemmeOption1[0]
lemmatize_list_of_sentences2.append(lemme)
return lemmatize_list_of_sentences2 # should return a list of lists where each list contains the lemme retrieve
lemmatize_train= lemmatize(sentences_train_remove_stop_words)
lemmatize_test= lemmatize(sentences_test_remove_stop_words)
print(lemmatize_train)
Кроме того, я хотел бы добавить функцию лемматизации в строку кода, чтобы проверить, пуст ли индекс (2) или (-1), и, если он пуст, получить слово по первому индексу.
Я придумал это, но как я могу совместить это с моей функцией лемматизации
for word in subl:
lemme= word.split('\t')
try:
if lemme[2] == '':
lemmatize_list_of _sentences2.append(parts[0])
else:
lemmatize_list_of _sentences2.append(parts[2])
except:
print(parts)
список предложений в file_input
La période de rotation de la Lune est la même que sa période orbitale et elle présente donc toujours le même hémisphère.
Cette rotation synchrone résulte des frottements qu’ont entraînés les marées causées par la Terre.
После добавления тегов к тексту и распечатки списка предложений_tagging у меня есть следующее:
первое предложение:
[[Tag(word='la', pos='DET:ART', lemma='le'), Tag(word='période', pos='NOM', lemma='période'), Tag(word='rotation', pos='NOM', lemma='rotation'), Tag(word='lune', pos='NOM', lemma='lune'), Tag(word='période', pos='NOM', lemma='période'), Tag(word='orbitale', pos='ADJ', lemma='orbital'), Tag(word='présente', pos='VER:pres', lemma='présenter'), Tag(word='donc', pos='ADV', lemma='donc'), Tag(word='toujours', pos='ADV', lemma='toujours')]]
целые предложения:
[[Tag(word='la', pos='DET:ART', lemma='le'), Tag(word='période', pos='NOM', lemma='période'), Tag(word='rotation', pos='NOM', lemma='rotation'), Tag(word='lune', pos='NOM', lemma='lune'), Tag(word='période', pos='NOM', lemma='période'), Tag(word='orbitale', pos='ADJ', lemma='orbital'), Tag(word='présente', pos='VER:pres', lemma='présenter'), Tag(word='donc', pos='ADV', lemma='donc'), Tag(word='toujours', pos='ADV', lemma='toujours')], [Tag(word='cette', pos='PRO:DEM', lemma='ce'), Tag(word='rotation', pos='NOM', lemma='rotation'), Tag(word='synchrone', pos='ADJ', lemma='synchrone'), Tag(word='résulte', pos='VER:pres', lemma='résulter'), Tag(word='frottements', pos='NOM', lemma='frottement'), Tag(word='entraînés', pos='VER:pper', lemma='entraîner'), Tag(word='les', pos='DET:ART', lemma='le'), Tag(word='marées', pos='NOM', lemma='marée'), Tag(word='causées', pos='VER:pper', lemma='causer')]]
После получения леммы у меня есть список слов, чего я не ожидал. Ожидается список для каждого предложения.
Выход :
['le', 'période', 'rotation', 'lune', 'période', 'orbital', 'présenter', 'donc', 'toujours', 'ce', 'rotation', 'synchrone', 'résulter', 'frottement', 'entraîner', 'le', 'marée', 'causer']
Ожидается: каждое слово предложения должно состоять из одной строки с пробелами между словами.
['le période rotation lune période orbital présenter donc toujours','ce rotation synchrone résulter frottement entraîner le marée causer']