NLTK的使用

本文详细介绍了如何使用Python的nltk库进行自然语言处理,包括搜索词的上下文、词频排序、词汇丰富度计算、双连词提取、文本分析等。还涉及到了机器翻译、古腾堡语料库、网络文本、聊天会话、词性标注等多个方面,展示了nltk在文本处理中的广泛应用。

from nltk.book import * #使用nlp工具包
text1.concordance(“monstrous”) #搜索文本,看到词的上下文
text1.similar(“monstrous”)#搜索词的上下文,查找还有哪些词出现在相似的上下文中,以此判断该词在文中的意思
函数common_contexts允许我们研究两个或两个以上的词共同的上下文,如monstrous和very。我们必须用方括号和圆括号把这些词括起来,中间用逗号分割。

text2.common_contexts([“monstrous”, “very”])
be_glad am_glad a_pretty is_pretty a_lucky

text4.dispersion_plot([“citizens”, “democracy”, “freedom”, “duties”, “America”])
#通过离散图看出上述的词在整个文本的分布位置,可以用来研究随时间推移语言使用上的变化

使用函数 len 获取长度
如:len(text3)
set(text3)获得 text3 的词汇表 #记录文本中出现的不同词汇,不考虑同个词汇的出现频率
词和标点符号统称为标识符
一个词类型是指一个词在一个文本中独一无二的出现形式或拼写。
计数的项目中包括标点符号,所以我们把这些叫做唯一项目类型而不是词类型。

sorted(set(text3))
#得到一个词汇项的排序表,这个表以各种标点符号开始,然后是以 A 开头的词汇。大写单词排在小写单词前面
from future import division#测量文本词汇丰富度(平均每个词在文本中出现的次数)
print(len(text3)/len(set(text3)))#python中使用浮点除法
text3.count(“smote”)
#计算特定词在文本中的出现次数

def lexical_diversity(text):
return len(text) / len(set(text)) #定义函数
sent1 = [‘Call’, ‘me’, ‘Ishmael’, ‘.’] #链表,存储文本的方式,可以对链表使用 Python 加法运算,创造一个新链表
sent1.append(“Some”) #追加,向链表中增加一个元素
索引链表
text4[173] #找出文本次序为173的元素

text4.index(‘awaken’) #找出元素第一次出现的索引

text5[16715:16735]#切片,获取子链表,m:n 表示元素 m…n-1

’ '.join([‘Monty’, ‘Python’]) #把词用链表连接起来组成单个字符串

‘Monty Python’.split() #字符串分割成一个链表

fdist1 = FreqDist(text1) #获取文本的总词数
sorteddict = sorted(fredist1.items(), key=lambda item:item[1],reverse=True)

按词频排序的结果

s=[]
print(sorteddict[:50]) # 取前50的词,出现单词和频率
for i in range (50) :
s.append(sorteddict[i][0])

print(s)#只出现单词

fdist1[‘whale’] #获取whale出现的次数
fdist1.plot(50, cumulative=True)#词汇累计频率图,记录前五十个词
fdist1.hapaxes() #查找只出现过一次的词

此集合中所有 w 都满足 w 是集合 V(词汇表)的一
个元素且 w 有性质 P。表示为:[w for w in V if p(w)]
Ex:
V = set(text1) #链表不同于集合,可能存在相同的元素
long_words = [w for w in V if len(w) > 15 and fredist1[w]>=1000
] #筛选出长度大于15的单词且词频超过1000
sorted(long_words)
bigrams([‘more’, ‘is’, ‘said’, ‘than’, ‘done’]) #提取文本中的双连词

[(‘more’, ‘is’), (‘is’

### 使用 NLTK 进行 BLEU 评分计算 BLEU(Bilingual Evaluation Understudy)是一种用于评估机器翻译质量的指标,也可以广泛应用于其他自然语言处理任务中的文本生成评价。以下是关于如何利用 Python 中的 `NLTK` 库实现 BLEU 评分的具体方法。 #### 导入必要的库 为了使用 NLTK 的 BLEU 功能,首先需要导入相关模块并准备数据: ```python from nltk.translate.bleu_score import sentence_bleu, corpus_bleu import nltk nltk.download('punkt') # 下载 punkt tokenizer 数据包 ``` #### 准备参考译文和候选译文 在 BLEU 计算过程中,通常会有一组或多组参考译文作为标准答案,而候选译文则是模型生成的结果。例如: ```python reference_corpus = [ [['this', 'is', 'a', 'test'], ['this', 'is' ,'also', 'a', 'test']], # 参考句子列表 ] candidate_sentence = ['this', 'is', 'a', 'test'] # 候选句子 ``` 这里需要注意的是,参考语料是一个嵌套列表结构,其中每一项代表一组可能的标准答案。 #### 单句 BLEU 分数计算 对于单个句子级别的 BLEU 得分,可以调用 `sentence_bleu` 方法: ```python score = sentence_bleu(reference_corpus, candidate_sentence) print(f'Sentence BLEU score: {score}') ``` 上述代码片段展示了如何针对单一候选句子及其对应的多组参考句子进行 BLEU 打分[^1]。 #### 多句 BLEU 分数计算 如果要对整个语料库进行打分,则需采用 `corpus_bleu` 方法。此时输入的数据形式稍有不同——候选人应该是一系列完整的句子而非单独的一条记录: ```python candidate_corpus = [["this", "is", "a", "test"], ["another", "example"]] # 候选句子集合 references_for_candidates = [[["this", "is", "a", "sample"]], [["yet", "one", "more", "instance"]]] # 对应每一条候选项的参考集 corpus_level_score = corpus_bleu(references_for_candidates, candidate_corpus) print(f'Corpus-level BLEU score: {corpus_level_score}') ``` 这段脚本说明了批量处理多个样本时的操作方式[^2]。 #### 调整权重参数 默认情况下,BLEU 将均匀分配给 n-gram 配置 (即 unigram 至 quadrigram),但可以通过设置 weights 参数来自定义各阶 n-grams 的比重。比如更关注短语匹配度而不是长序列一致性的话,可适当提高低阶 gram 权重: ```python weights_uni = (1.0, 0, 0, 0) weights_bi = (0.5, 0.5, 0, 0) uni_gram_score = sentence_bleu(reference_corpus, candidate_sentence, weights=weights_uni) bi_gram_score = sentence_bleu(reference_corpus, candidate_sentence, weights=weights_bi) print(f'Uni-gram BLEU score: {uni_gram_score}') print(f'Bi-gram BLEU score: {bi_gram_score}') ``` 以上部分解释了通过调整不同的权重组合来获取特定类型的 bleu 结果[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值