33

さまざまな品詞を翻訳/変換する Python ライブラリ関数が必要です。場合によっては、複数の単語を出力する必要があります (たとえば、"coder" と "code" はどちらも動詞 "to code" の名詞であり、一方が主語で、もう一方が目的語です)。

# :: String => List of String
print verbify('writer') # => ['write']
print nounize('written') # => ['writer']
print adjectivate('write') # => ['written']

私は主に動詞 <=> 名詞を気にします。書きたいメモ取りプログラムのために。つまり、「カフェインはA1に拮抗する」または「カフェインはA1拮抗薬です」と書くことができ、NLPを使用すると、それらが同じことを意味することがわかります。(それは簡単ではなく、タグ付けだけでなく解析するNLPが必要であることはわかっていますが、プロトタイプをハックしたいです)。

同様の質問... 形容詞と副詞を名詞形に変換する (この回答は、ルートPOSにのみ由来します.i want to go between POS.)

言語学で変換と呼ばれる ps http://en.wikipedia.org/wiki/Conversion_%28linguistics%29

4

4 に答える 4

21

これは、よりヒューリスティックなアプローチです。コーディングしたばかりなので、スタイルについてはお詫び申し上げます。wordnet の derivationally_related_forms() を使用します。nounifyを実装しました。verbify も同様に機能すると思います。私がテストしたことから、かなりうまく機能します:

from nltk.corpus import wordnet as wn

def nounify(verb_word):
    """ Transform a verb to the closest noun: die -> death """
    verb_synsets = wn.synsets(verb_word, pos="v")

    # Word not found
    if not verb_synsets:
        return []

    # Get all verb lemmas of the word
    verb_lemmas = [l for s in verb_synsets \
                   for l in s.lemmas if s.name.split('.')[1] == 'v']

    # Get related forms
    derivationally_related_forms = [(l, l.derivationally_related_forms()) \
                                    for l in    verb_lemmas]

    # filter only the nouns
    related_noun_lemmas = [l for drf in derivationally_related_forms \
                           for l in drf[1] if l.synset.name.split('.')[1] == 'n']

    # Extract the words from the lemmas
    words = [l.name for l in related_noun_lemmas]
    len_words = len(words)

    # Build the result in the form of a list containing tuples (word, probability)
    result = [(w, float(words.count(w))/len_words) for w in set(words)]
    result.sort(key=lambda w: -w[1])

    # return all the possibilities sorted by probability
    return result
于 2013-05-25T18:05:18.103 に答える
4

これはあなたの質問全体に答えるものではないことを理解していますが、それはその大部分に答えます。http://nodebox.net/code/index.php/Linguistics#verb_conjugationをチェックしてみ ます。このPythonライブラリは、動詞を活用し、単語が動詞、名詞、形容詞のいずれであるかを認識できます。

サンプルコード

print en.verb.present("gave")
print en.verb.present("gave", person=3, negate=False)
>>> give
>>> gives

単語を分類することもできます。

print en.is_noun("banana")
>>> True

ダウンロードはリンクの上部にあります。

于 2013-01-24T02:06:14.343 に答える
3

1 つのアプローチは、単語の辞書とその POS タグおよび単語形式のマッピングを使用することです。そのような辞書を取得または作成する場合 (すべての辞書には単語の POS タグとすべての派生フォームの基本フォームがリストされているため、従来の辞書のデータにアクセスできる場合は可能です)、次のようなものを使用できます。

def is_verb(word):
    if word:
        tags = pos_tags(word)
        return 'VB' in tags or 'VBP' in tags or 'VBZ' in tags \
               or 'VBD' in tags or 'VBN' in tags:

def verbify(word):
    if is_verb(word):
        return word
    else:
       forms = []
       for tag in pos_tags(word):
           base = word_form(word, tag[:2])
           if is_verb(base):
              forms.append(base)
       return forms
于 2013-01-24T04:54:05.743 に答える