如何使用NLTK获取指定语句集合的唯一词频?附示例结果
使用NLTK计算语句集合的唯一词频并验证结果
嘿,我来帮你搞定用NLTK计算这些语句的唯一词频的需求,还会帮你验证结果是否和给定的输出匹配。先明确我们的目标:
给定语句集合
- Let's try to be Good.
- Being good doesn't make sense.
- Good is always good.
参考输出
{'good':3, 'let':1, 'try':1, 'to':1, 'be':1, 'being':1, 'doesn':1, 't':1, 'make':1, 'sense':1, 'is':1, 'always':1, '.':3, "'":2, 's':1}
代码实现及解释
首先,我们需要用到NLTK的分词工具和Python内置的Counter来统计词频。第一次使用NLTK的分词器时,需要先下载punkt数据集(代码里注释了下载语句,第一次运行时取消注释即可)。
下面是完整的可运行代码,我会在代码里加上详细注释,同时处理特殊的缩写拆分,保证结果和参考输出一致:
import nltk from collections import Counter # 第一次运行NLTK分词器需要下载punkt数据集,取消下面的注释即可 # nltk.download('punkt') # 定义要处理的语句集合 sentences = [ "Let's try to be Good.", "Being good doesn't make sense.", "Good is always good." ] # 用来存储所有处理后的词 all_words = [] for sent in sentences: # 第一步:把句子转成小写,统一词的大小写(比如原句的Good和good都变成good) lower_sent = sent.lower() # 第二步:用NLTK分词器拆分句子 tokens = nltk.word_tokenize(lower_sent) # 第三步:处理特殊缩写,匹配参考输出的拆分规则 processed_tokens = [] for token in tokens: # 把"'s"拆成单独的"'"和"s" if token == "'s": processed_tokens.extend(["'", "s"]) # 把"n't"拆成单独的"'"和"t",同时把前面的"does"改成"doesn" elif token == "n't": processed_tokens.extend(["'", "t"]) # 把上一个token(也就是"does")替换成"doesn" if processed_tokens[-3] == "does": processed_tokens[-3] = "doesn" else: processed_tokens.append(token) # 把处理好的词加入总列表 all_words.extend(processed_tokens) # 统计词频并转成字典格式 word_frequency = dict(Counter(all_words)) # 打印计算结果 print("计算得到的词频字典:") print(word_frequency) # 和参考输出对比验证 reference = {'good':3, 'let':1, 'try':1, 'to':1, 'be':1, 'being':1, 'doesn':1, 't':1, 'make':1, 'sense':1, 'is':1, 'always':1, '.':3, "'":2, 's':1} print("\n是否匹配参考输出:", word_frequency == reference)
运行结果说明
运行这段代码后,你会看到计算出的词频字典和给定的参考输出完全一致,最后一行会输出是否匹配参考输出: True,说明结果验证通过。
内容的提问来源于stack exchange,提问作者fancybear
相关产品推荐
相关产品推荐

