4

Я пытаюсь получить основное английское слово для английского слова, которое модифицировано из его базовой формы. Этот вопрос был задан здесь, но я не нашел правильного ответа, поэтому я пытаюсь выразить это таким образом. Я попробовал 2 стволовых средства и один леммитатор из пакета NLTK, который является стримером портьером, стволовым шампиньором и сломовым lemmatiser.Получение базовой формы английского слова

Я попробовал этот код

from nltk.stem.porter import PorterStemmer 
from nltk.stem.snowball import SnowballStemmer 
from nltk.stem.wordnet import WordNetLemmatizer 

words = ['arrival','conclusion','ate'] 

for word in words: 
    print "\n\nOriginal Word =>", word 
    print "porter stemmer=>", PorterStemmer().stem(word) 
    snowball_stemmer = SnowballStemmer("english") 
    print "snowball stemmer=>", snowball_stemmer.stem(word) 
    print "WordNet Lemmatizer=>", WordNetLemmatizer().lemmatize(word) 

Это выход я получаю

Original Word => arrival 
porter stemmer=> arriv 
snowball stemmer=> arriv 
WordNet Lemmatizer=> arrival 


Original Word => conclusion 
porter stemmer=> conclus 
snowball stemmer=> conclus 
WordNet Lemmatizer=> conclusion 


Original Word => ate 
porter stemmer=> ate 
snowball stemmer=> ate 
WordNet Lemmatizer=> ate 

, но я хочу этот выход

Input : arrival 
    Output: arrive 

    Input : conclusion 
    Output: conclude 

    Input : ate 
    Output: eat 

Как я могу добиться этого. Есть ли уже имеющиеся инструменты для этого. Это называется морфологическим анализом. Я знаю об этом, но должны быть некоторые инструменты, которые уже достигают этого. Помощь ценится :)

Первый Редактировать

Я попробовал этот код

import nltk 
from nltk.stem.wordnet import WordNetLemmatizer 
from nltk.tokenize import word_tokenize 
from nltk.corpus import wordnet as wn 

query = "The Indian economy is the worlds tenth largest by nominal GDP and third largest by purchasing power parity" 

def is_noun(tag): 
    return tag in ['NN', 'NNS', 'NNP', 'NNPS'] 

def is_verb(tag): 
    return tag in ['VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ'] 

def is_adverb(tag): 
    return tag in ['RB', 'RBR', 'RBS'] 

def is_adjective(tag): 
    return tag in ['JJ', 'JJR', 'JJS'] 

def penn_to_wn(tag): 
    if is_adjective(tag): 
     return wn.ADJ 
    elif is_noun(tag): 
     return wn.NOUN 
    elif is_adverb(tag): 
     return wn.ADV 
    elif is_verb(tag): 
     return wn.VERB 
    return wn.NOUN 

tags = nltk.pos_tag(word_tokenize(query)) 
for tag in tags: 
    wn_tag = penn_to_wn(tag[1]) 
    print tag[0]+"---> "+WordNetLemmatizer().lemmatize(tag[0],wn_tag) 

здесь пытались использовать WordNet лемматизатор, предоставляя соответствующие теги. здесь вывод

The---> The 
Indian---> Indian 
economy---> economy 
is---> be 
the---> the 
worlds---> world 
tenth---> tenth 
largest---> large 
by---> by 
nominal---> nominal 
GDP---> GDP 
and---> and 
third---> third 
largest---> large 
by---> by 
purchasing---> purchase 
power---> power 
parity---> parity 

Все еще такие слова, как «приход» и «заключение», не будут обработаны при таком подходе. Есть ли какое-либо решение для этого

ответ

2

Хорошо, так ... для слова «съел» Я думаю, что вы ищете NodeBox::Linguistics.

print en.verb.present("gave") 
>>> give 

И я не совсем понял, почему вы хотите глагола или «прихода», но не «заключения».

+0

Я раньше встретил узел. Вы правы, я думаю, что в случае заключения базовая форма должна быть «завершена». Я отредактирую. – Gunjan

+0

Так это сработало? – Lior

+0

Он отлично подходит для слов. Но все же у меня проблемы со словами «прибытие» – Gunjan