查找指定单词后出现的单词

时间:2014-11-07 18:06:39

标签: python dictionary

对于输入文件中每个单词后面的每个单词,我们希望程序告诉我们该单词跟随它的次数。如果单词位于输入文件的末尾,则第一个单词就是后面的单词。

以下代码:

def word_cond_dictionary():
    File = open('input.txt','r').readline()
    words = File.split(",")
    dic = {}
    for i,val in enumerate(words):
        if val in dic:
            if words[i+1] in dic[val]:
                dic[val][words[i+1]] +=1
            else:
                dic[val][words[i+1]] = 1
        else:
            dic[val] = {words[0]:1}
    print(dic)

输入文件如下:

red,blue,blue,red,red,green

打印以下输出:

{'blue': {'red': 2}, 'green': {'red': 1}, 'red': {'green': 1, 'red': 2}}

但我们的输出应该是:

{'blue': {'red': 1, 'blue': 1}, 'green': {'red': 1}, 'red': {'green': 1, 'red': 1, 'blue: 1}}

3 个答案:

答案 0 :(得分:0)

您可以轻松获取列表中的所有单词对

words = ["red","blue","red","red","blue","red","green","blue","red"]
from collections import Counter
print Counter(zip(words,words[1:]))

答案 1 :(得分:0)

我相信你所寻找的是Bag of Words模型。

http://en.wikipedia.org/wiki/Bag-of-words_model

给定的

给定一个包含文件全部内容的字符串,您可以使用find函数找到所考虑的第一个单词的索引。例如,

text.find('red')

找到该索引后,您可以使用split功能对逗号进行标记。

答案 2 :(得分:0)

以下是我对该问题的解决方案。我有一个非常类似的问题需要努力。它打印正确的输出。

f = open ('example.txt').readline()
line = f.translate(None, string.punctuation).lower().split()

myDict = {}

for k, val in list(enumerate(line)):
    if k+1 < len(line):
        if val in myDict:
            if line[k+1] in myDict[val]:
                myDict[val][line[k]] += 1
            else:
                myDict[val][line[k+1]] = 1
        else:
            myDict[val] = {line[k+1]:1}
print myDict