python - 使用 CountVectorizer 时如何忽略以克为单位的单词位置?
问题描述
我有一个语料库,我想获得所有 2 克的频率。这是我正在使用的代码:
vec = CountVectorizer(ngram_range=(2,2).fit(corpus)
bag_of_words = vec.transform(corpus)
sum_words = bag_of_words.sum(axis=0)
words_freq = [(word, sum_words[0, idx]) for word, idx in vec.vocabulary_.items()]
“words_freq”变量包含在语料库中找到的每个 gram 的频率,例如:
print(words_freq)
[('green apple', 10), ('yellow apple',2), ('apple green',5)]
但是,我想知道如何在不考虑 gram 中单词顺序的情况下获得每个 gram 的频率。
例如,“green apple”和“apple green”应该被认为是相同的克并给出结果('green apple',15)。
谢谢你的帮助。
解决方案
您可以使用以下代码片段。请注意,它仅适用于二元组。
words_freq = [('green apple', 10), ('yellow apple',2), ('apple green',5)]
alternate_words_freq = {}
for term, freq in words_freq:
# Assume that bigrams are separated by a space
# Reverse the bigram
reverse_term = " ".join(term.split(" ")[::-1])
if term in alternate_words_freq.keys():
alternate_words_freq[term]+=freq
elif reverse_term in alternate_words_freq.keys():
alternate_words_freq[reverse_term]+=freq
else:
alternate_words_freq[term]=freq
# Prints [('green apple', 15), ('yellow apple', 2)]
print(list(alternate_words_freq.items()))
推荐阅读
- rxjs - Rxjs:压缩两个长度不等的观察值
- javascript - 按下时更改本机文本的背景颜色
- android - 将配置添加为依赖项是一种令人困惑的行为,不建议这样做
- string - 打字稿:如何在接口中的字符串索引签名定义中引用属性名称
- python - 熊猫将时间序列数据列转换为列表列?
- excel - 插入、复制、删除麻烦
- ceph - ceph mds错误目录inode上的错误回溯并写入新文件崩溃
- python-3.x - 用漂亮的汤提取额外的数据
- swiftui - 使用 ForEach 创建视图,但如何让 onTapGesture 立即更新?
- java - 使用 Javax servlet Webfilter 在 Spring Boot 中 CORS 起源不起作用