使用Python不借助NLTK统计单词列表中特定bigram的出现频率
Python无依赖实现特定二元组(bigram)频率统计
实现思路
二元组指的是单词序列中连续出现的两个有序相邻单词,我们只需要遍历单词列表的相邻元素对,和目标二元组匹配计数即可,全程不需要引入NLTK等第三方库,用Python原生语法或标准库就能实现。
方法1:单目标直接统计(适合仅查询1个特定二元组的场景)
遍历一次单词列表,遇到匹配的目标二元组就累加计数,内存占用低:
# 示例单词列表 word_list = ['car','hamburger','airplane','car','hamburger','pizza','hamburger'] # 待统计的目标二元组 target = ('car', 'hamburger') count = 0 # 遍历到倒数第二个元素即可,避免索引越界 for i in range(len(word_list) - 1): if (word_list[i], word_list[i+1]) == target: count += 1 print(count) # 上述示例输出结果为2
方法2:全量统计后查询(适合需要多次查询不同二元组的场景)
用Python标准库collections.Counter一次性统计所有二元组的频次,后续查询效率为O(1):
from collections import Counter word_list = ['car','hamburger','airplane','car','hamburger','pizza','hamburger'] # 生成所有二元组 all_bigrams = [(word_list[i], word_list[i+1]) for i in range(len(word_list)-1)] # 统计所有二元组频率 bigram_counter = Counter(all_bigrams) # 查询目标二元组,不存在则默认返回0 target_count = bigram_counter.get(('car', 'hamburger'), 0) print(target_count)
内容的提问来源于stack exchange,提问作者Nub199
相关产品推荐
相关产品推荐

