1

Python は初めてで、リストとタプルについていくつか質問があります。文とワードクラス タグを含むタプルで構成されるリストがあります。これは私のリストの 1 つの要素です。

[('It', 'PPS'), ('says', 'VBZ'), ('that', 'CS'), ('``', '``'), ('in', 'IN'), ('the', 'AT'), ('event', 'NN'), ('Congress', 'NP'), ('does', 'DOZ'), ('provide', 'VB'), ('this', 'DT'), ('increase', 'NN'), ('in', 'IN'), ('federal', 'JJ'), ('funds', 'NNS'), ("''", "''"), (',', ','), ('the', 'AT'), ('State', 'NN-TL'), ('Board', 'NN-TL'), ('of', 'IN-TL'), ('Education', 'NN-TL'), ('should', 'MD'), ('be', 'BE'), ('directed', 'VBN'), ('to', 'TO'), ('``', '``'), ('give', 'VB'), ('priority', 'NN'), ("''", "''"), ('to', 'IN'), ('teacher', 'NN'), ('pay', 'NN'), ('raises', 'NNS'), ('.', '.')]

ご覧のとおり、各単語には wordclass タグがあります。リスト内の単語 + 単語クラスを検索するにはどうすればよいですか? F.ex。about要素にwordclass-tag「JJ」に付けられた「federal」という単語が含まれているかどうかを確認したい場合は?

助けていただければ幸いです

4

3 に答える 3

2

代わりにセットを使用します。in次に、演算子を効率的に使用できます。

wlist = set([('It', 'PPS'), ('says', 'VBZ'), ('that', 'CS'), ('``', '``'), ('in', 'IN'), ('the', 'AT'), ('event', 'NN'), ('Congress', 'NP'), ('does', 'DOZ'), ('provide', 'VB'), ('this', 'DT'), ('increase', 'NN'), ('in', 'IN'), ('federal', 'JJ'), ('funds', 'NNS'), ("''", "''"), (',', ','), ('the', 'AT'), ('State', 'NN-TL'), ('Board', 'NN-TL'), ('of', 'IN-TL'), ('Education', 'NN-TL'), ('should', 'MD'), ('be', 'BE'), ('directed', 'VBN'), ('to', 'TO'), ('``', '``'), ('give', 'VB'), ('priority', 'NN'), ("''", "''"), ('to', 'IN'), ('teacher', 'NN'), ('pay', 'NN'), ('raises', 'NNS'), ('.', '.')])

print ('federal', 'JJ') in wlist # prints True
于 2013-02-18T18:34:14.560 に答える
1

リストに「JJ」でタグ付けされた「連邦」という単語があるかどうかを確認するには:

your_list = [('It', 'PPS'), ('says', 'VBZ'), ('that', 'CS'), ('``', '``'), ('in', 'IN'), ('the', 'AT'), ('event', 'NN'), ('Congress', 'NP'), ('does', 'DOZ'), ('provide', 'VB'), ('this', 'DT'), ('increase', 'NN'), ('in', 'IN'), ('federal', 'JJ'), ('funds', 'NNS'), ("''", "''"), (',', ','), ('the', 'AT'), ('State', 'NN-TL'), ('Board', 'NN-TL'), ('of', 'IN-TL'), ('Education', 'NN-TL'), ('should', 'MD'), ('be', 'BE'), ('directed', 'VBN'), ('to', 'TO'), ('``', '``'), ('give', 'VB'), ('priority', 'NN'), ("''", "''"), ('to', 'IN'), ('teacher', 'NN'), ('pay', 'NN'), ('raises', 'NNS'), ('.', '.')]
print ('federal', 'JJ') in your_list

リスト内包構文を使用すると、リストでさらに興味深いことができます。たとえば、単語のすべての出現のすべてのタグを表示します。

print " ".join([wordclass for word, wordclass in your_list if word == 'federal'])

単語やタグが含まれているかどうかをチェックするなど、作業するデータ構造に対して一般的な操作を行ういくつかの関数を作成することをお勧めします。

def hasWord(l, word):
    for w, wordclass in l:
        if w == word:
            return True
    return False

def hasTag(l, tag):
    for w, wordclass in l:
        if wordclass == tag:
            return True
    return False

if hasTag(your_list, 'JJ'): print your_list

コメントで質問に答えるには:

for sentence in sentences:
    if ('federal', 'JJ') in sentence:
        print sentence
于 2013-02-18T18:38:04.893 に答える
0

私の最初のアプローチは次のとおりです。

def find_tuple(input, l):
    for (e1, e2) in l:
        if e1==input[0] and e2==input[1]:
            return True
    return False

それは簡単ですが静的であり、問​​題にのみ適しています。より一般的だが同等のアプローチ:

def my_any(iterable, input, func):
    for element in iterable:
        if func(element, input):
            return True
    return False

input = ("federal","JJ")
l = [("It", "PPS"),("federal","JJ")]
print(my_any(l, input, lambda x, y: x[0]==y[0] and x[1]==y[1]))

ラムダ関数を渡して、希望するブール値マッチングを自分で決定します。これに対する簡単なアプローチは次のようになります。

input = ("federal","JJ")
l = [("It", "PPS"),("federal","JJ")]
if input in l:
    print("True")

解決したい問題をより具体的に説明していただけると、具体的なアドバイスがしやすくなります。(つまり、戻り値の型は何ですか: Boolean/String/Tuple ..?) これが役に立てば幸いです。

乾杯!

于 2013-02-18T19:01:58.997 に答える