首页 > 解决方案 > 程序无法识别多次出现的单词 python(在 linux 上)

问题描述

我正在通过从示例文本创建一个有向图来制作一个论文生成器,其中单词是节点,并且在单词和跟随它的任何单词之间存在有向边。我正在通过字典形成节点,但程序似乎没有在第一个单词之后读取出现的单词。

tH = {}
with open('ex','r') as f:
  for line in f:
    valHold = [w.lower() for w in line.split()]
for x in valHold:
  if x not in tH:
    tH[x] = []
    if x != valHold[-1] and valHold[valHold.index(x) + 1] not in tH[x]:
     tH[x].append(valHold[valHold.index(x) + 1])
print(tH)

我希望输出是

{'the' : ['sun', 'moon'], 'sun' : ['the'], 'moon' : []}

当文件'ex'包含字符串时

'the sun the moon'

但相反的输出是

{'the' : ['sun'], 'sun' : ['the'] 'moon' : []}

标签: pythonmarkov-chains

解决方案


而不是for x in valHold:遍历 valHold 中的每个单词,您需要遍历每个第二个单词,即 x = valHold[0](store valHold[1]),x =valHold[2](store valHold[3]) 等等上。你可以这样做:

for i in range(0, len(valHold), 2):
    x = valHold[i]
    if x not in tH:
        tH[x] = []
    if x != valHold[-1] and valHold[i + 1] not in tH[x]:
        tH[x].append(valHold[i + 1])

推荐阅读