3

何十万もの単語を含む Python リストがあります。単語は、テキスト内の順序で表示されます。

その単語を含む文字列に関連付けられた各単語の辞書を作成し、その前後に2つの(たとえば)単語が表示されるようにしています。

リストの例:「これは」「ある」「例」「文」

辞書になるはずです:

"This" = "This is an"
"is" = "This is an example"
"an" = "This is an example sentence"
"example" = "is an example sentence"
"sentence" = "an example sentence"

何かのようなもの:

WordsInContext = Dict()
ContextSize = 2
wIndex = 0
for w in Words:
    WordsInContext.update(w = ' '.join(Words[wIndex-ContextSize:wIndex+ContextSize]))
    wIndex = wIndex + 1

これにはいくつかの構文エラーが含まれている可能性がありますが、それらが修正されたとしても、これを行うには非常に非効率的な方法になると確信しています.

誰かがより最適化された方法を提案できますか?

4

2 に答える 2

5

私のおすすめ:

words = ["This", "is", "an", "example", "sentence" ]

dict = {}

// insert 2 items at front/back to avoid
// additional conditions in the for loop
words.insert(0, None)
words.insert(0, None)
words.append(None)
words.append(None)

for i in range(len(words)-4):   
    dict[ words[i+2] ] = [w for w in words[i:i+5] if w]
于 2012-04-20T08:02:11.440 に答える
0
>>> from itertools import count
>>> words = ["This", "is", "an", "example", "sentence" ]
>>> context_size = 2
>>> dict((word,words[max(i-context_size,0):j]) for word,i,j in zip(words,count(0),count(context_size+1)))
{'This': ['This', 'is', 'an'], 'is': ['This', 'is', 'an', 'example'], 'sentence': ['an', 'example', 'sentence'], 'example': ['is', 'an', 'example', 'sentence'], 'an': ['This', 'is', 'an', 'example', 'sentence']}

パイソン2.7+または3.x

{word:words[max(i-context_size,0):j] for word,i,j in zip(words,count(0),count(context_size+1))}
于 2012-04-20T10:52:53.593 に答える