8

基本形から変更された英単語の基本英単語を取得しようとしています。この質問はここで尋ねられましたが、適切な答えが見つからなかったので、このように表現しようとしています. NLTK パッケージの 2 つのステマーと 1 つのレンマタイザー (ポーター ステマー、スノーボール ステマー、ワードネット レマタイザー) を試しました。

私はこのコードを試しました:

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 lemmatizer を使用しようとしました。出力は次のとおりです。

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

それでも、「到着」や「結論」などの単語は、このアプローチでは処理されません。これに対する解決策はありますか?

4

2 に答える 2

2

わかりました...「食べた」という言葉については、 NodeBox::Linguisticsを探していると思います。

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

そして、動詞または「到着」が必要なのに、「結論」の動詞が必要ない理由が完全にはわかりませんでした。

于 2014-11-15T15:17:29.343 に答える