【发布时间】:2016-01-16 07:01:26
【问题描述】:
我有一个字符串(或单词列表)。我想创建每个可能的单词对组合的元组,以便将它们传递给 Counter 以进行字典创建和频率计算。频率按以下方式计算:如果该对存在于一个字符串中(无论顺序如何,或者它们之间是否有任何其他单词),频率 = 1(即使 word1 的频率为 7,word2 的频率为 3)一对 word1 和 word2 仍然是 1)
我正在使用循环创建所有对的元组但卡住了
tweetList = ('I went to work but got delayed at other work and got stuck in a traffic and I went to drink some coffee but got no money and asked for money from work', 'We went to get our car but the car was not ready. We tried to expedite our car but were told it is not ready')
words = set(tweetList.split())
n = 10
for tweet in tweetList:
for word1 in words:
for word2 in words:
pairW = [(word1, word2)]
c1 = Counter(pairW for pairW in tweet)
c1.most_common(n)
但是,输出很奇怪:
[('k', 1)]
它似乎不是单词而是迭代字母
如何解决这个问题?使用 split() 将字符串转换为单词列表?
另一个问题:如何避免创建重复的元组,例如:(word1,word2)和(word2,word1)?枚举?
作为输出,我希望有一个字典,其中键 = 所有单词对(但请参阅重复的注释),值 = 列表中一对的频率
谢谢!
【问题讨论】:
-
你应该指出你期望的输出。
-
for tweet in tweetlist会遍历原始字符串中的字符,这似乎毫无意义。在它上面调用split不会导致它变成一个列表 -
tweetlist 是 2 个字符串的列表
-
('work','work')这样的配对呢?那是一对有序的词——你要数这样的词对吗? -
@Toly -- 我明白了,我滚动到最后但错过了中间的逗号。狡猾地说,它是一个字符串的元组。但是然后- 调用
split是没有意义的。元组没有拆分方法。
标签: python tuples counter std-pair