我试图使用相似性度量将两个文本与其术语频率进行比较。
想象一下以下两句话:
text1 =“维基百科是由非盈利的维基媒体基金会支持和托管的互联网百科全书”.split()
text2 =“wikipedia是一个使用wiki软件协同构建的免费百科全书”.split()
然后我将他们的术语频率用作向量:
from collections import Counter
vec_x = Counter(text1).values()
vec_y = Counter(text2).values()
现在我希望这些值是对齐的,所以例如vec_x中“by”的计数与vec_y中“by”的计数在同一位置重合,并且如果该单词没有出现在任何一个中向量,向向量添加0,因此它们具有相同的长度。所以,例如:
#vectors obtained
#vec_x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
#vec_y = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
#Output expected
#vec_x = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1]
#vec_y = [1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1]
提前致谢。任何帮助表示赞赏。
编辑:抱歉打字错误
答案 0 :(得分:4)
稍微概括一下以处理任意数量的句子,我们可以通过创建所有单词的列表来对齐您的向量,然后按顺序迭代计数:
>>> texts = [text1, text2]
>>> counts = [Counter(text) for text in texts]
>>> all_words = sorted(set().union(*counts))
>>> vecs = [[count.get(word, 0) for word in all_words] for count in counts]
>>> vecs[0]
[0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1]
>>> vecs[1]
[1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1]