2

タプル形式のタグ付きテキスト (単語、タグ) があるとします。タグに変更を加えるために、文字列に変換したいと考えています。以下の私の関数は、テキストの最後の文のみを表示します。私が理解できない明らかで愚かな間違いがあると思います。そのため、テキスト全体で機能するようにしてください。

>>> import nltk
>>> tpl = [[('This', 'V'), ('is', 'V'), ('one', 'NUM'), ('sentence', 'NN'), ('.', '.')], [('And', 'CNJ'), ('This', 'V'), ('is', 'V'), ('another', 'DET'), ('one', 'NUM')]]

def translate(tuple2string):
    for sent in tpl:
        t = ' '.join([nltk.tag.tuple2str(item) for item in sent])

>>> print t
    'And/CNJ This/V is/V another/DET one/NUM'

興味のある方へのPS、tuple2str関数はここに記載されています

編集:今、同じ形式のタプルに変換する必要があります。どうすればいいのですか?

>>> [nltk.tag.str2tuple(item) for item in t.split()] 

上記のものはタプル全体に変換されますが、埋め込まれたものが必要です (入力 ( tpl) と同じ)

EDIT2:まあ、おそらくコード全体を公開する価値があります:

def translate(tpl):
    t0 = [' '.join([nltk.tag.tuple2str(item) for item in sent]) for sent in tpl] 
    for t in t0: 
        t = re.sub(r'/NUM', '/N', t) 
        t = [nltk.tag.str2tuple(item) for item in t.split()] 
    print t
4

1 に答える 1

3
>>> ' '.join(' '.join(nltk.tag.tuple2str(item) for item in sent) for sent in tpl)
'This/V is/V one/NUM sentence/NN ./. And/CNJ This/V is/V another/DET one/NUM'

編集:

これを可逆にしたい場合は、外部結合を行わないでください。

>>> [' '.join([nltk.tag.tuple2str(item) for item in sent]) for sent in tpl]
['This/V is/V one/NUM sentence/NN ./.', 'And/CNJ This/V is/V another/DET one/NUM']

編集2:

私たちはすでにこれを乗り越えたと思っていました...

>>> [[nltk.tag.str2tuple(re.sub('/NUM', '/N', w)) for w in s.split()] for s in t0]
[[('This', 'V'), ('is', 'V'), ('one', 'N'), ('sentence', 'NN'), ('.', '.')],
  [('And', 'CNJ'), ('This', 'V'), ('is', 'V'), ('another', 'DET'), ('one', 'N')]]

それを非リスト内包形式に分割します。

def translate(tpl):
    result = []
    t0 = [' '.join([nltk.tag.tuple2str(item) for item in sent]) for sent in tpl]
    for t in t0:
        t = re.sub(r'/NUM', '/N', t)
        t = [nltk.tag.str2tuple(item) for item in t.split()]
        result.append(t)
    return result
于 2010-11-27T23:36:28.137 に答える