如何在语料库中查找含2个字母g的单词并实现大小写不敏感统计
问题解答
现有代码结果异常的原因
你当前的判断逻辑if 'g' in word and 'g' in word完全等价于只判断单词中是否存在至少1个g,重复写两次相同的条件不会生效,所以统计出来的是所有带至少1个g的单词,数量自然远高于预期。
是否需要用正则实现?
两种方案都可以,不需要正则也能快速实现,正则只是可选方案:
- 非正则方案:直接统计单词中g的出现次数即可,代码更易读
- 正则方案:适合复杂匹配规则的场景,当前需求用正则属于大材小用
大小写不敏感的实现方法
统一把单词转为全小写/全大写后再做判断即可,正则方案也可以直接加忽略大小写的参数实现。
修正后的非正则实现代码
import nltk from nltk.corpus import gutenberg allwords = gutenberg.words() g_words = [] for word in allwords: # 先转小写,再统计g的数量为2 if word.lower().count('g') == 2: g_words.append(word) print(len(g_words))
如果你的需求是至少包含2个g,把==2改成>=2即可。
可选的正则实现代码
import nltk import re from nltk.corpus import gutenberg # 预编译正则,匹配包含至少2个g的情况,忽略大小写 pattern = re.compile(r'g.*g', re.IGNORECASE) allwords = gutenberg.words() g_words = [word for word in allwords if pattern.search(word)] print(len(g_words))
如果要匹配恰好2个g,正则可以改成r'^[^g]*g[^g]*g[^g]*$',再加上忽略大小写的标志即可。
内容的提问来源于stack exchange,提问作者matinier
相关产品推荐
相关产品推荐

