0

次のような品詞タガーに由来する 2 つのリストがあります。

pos_tags = [('This', u'DT'), ('is', u'VBZ'), ('a', u'DT'), ('test', u'NN'), ('sentence', u'NN'), ('.', u'.'), ('My', u"''"), ('name', u'NN'), ('is', u'VBZ'), ('John', u'NNP'), ('Murphy', u'NNP'), ('and', u'CC'), ('I', u'PRP'), ('live', u'VBP'), ('happily', u'RB'), ('on', u'IN'), ('Planet', u'JJ'), ('Earth', u'JJ'), ('!', u'.')]


pos_names = [('John', 'NNP'), ('Murphy', 'NNP')]

pos_names のリスト アイテムで pos_tags を更新する最終的なリストを作成したいと考えています。したがって、基本的には、pos_tags で John と Murphy を見つけて、POS タグを NNP に置き換える必要があります。

4

3 に答える 3

0

辞書がこの問題のより自然な解決策になることに同意しますがpos_tags、より明確な解決策が必要な場合は次のようになります。

for word, pos in pos_names:
    for i, (tagged_word, tagged_pos) in enumerate(pos_tags):
        if word == tagged_word:
            pos_tags[i] = (word,pos)

(辞書はおそらく多数の単語に対してより高速になるため、単語の順序をリストに保存し、辞書を使用して POS 割り当てを行うことを検討することをお勧めします)。

于 2014-12-17T14:50:02.157 に答える
0

pos_namesルックアップ テーブルとして動作するディクショナリを作成できます。次に、 を使用getして可能な置換をテーブルで検索し、置換が見つからない場合はタグをそのままにしておくことができます。

d = dict(pos_names)
pos_tags = [(word, d.get(word, tag)) for word, tag in pos_tags]
于 2014-12-17T14:35:18.893 に答える
0

与えられた

pos_tags = [('This', u'DT'), ('is', u'VBZ'), ('a', u'DT'), ('test', u'NN'), ('sentence', u'NN'), ('.', u'.'), ('My', u"''"), ('name', u'NN'), ('is', u'VBZ'), ('John', u'NNP'), ('Murphy', u'NNP'), ('and', u'CC'), ('I', u'PRP'), ('live', u'VBP'), ('happily', u'RB'), ('on', u'IN'), ('Planet', u'JJ'), ('Earth', u'JJ'), ('!', u'.')]

names = ['John', 'Murphy']

できるよ:

[next((subl for subl in pos_tags if name in subl)) for name in names]

それはあなたに与えるでしょう:

[('John', u'NNP'), ('Murphy', u'NNP')]
于 2014-12-17T14:40:09.277 に答える