自然语言处理NLP 02统计语言模型

发布于:2025-02-20 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

jieba中文分词

TF-IDF

TF(词频,Term Frequency)

IDF(逆文档频率,Inverse Document Frequency)

总结

案例:从文本数据中提取并分析关键词的重要性


jieba中文分词

jieba 是一个强大的中文分词工具,支持自定义词汇和多种分词模式。通过 jieba.add_word()jieba.load_userdict() 可以灵活地处理新词汇。

举例:对"饺子导演的作品哪吒2要冲到全球动画票房榜首啦"这句话进行分词

import jieba
​
# 输入文本
str = '饺子导演的作品哪吒2要冲到全球动画票房榜首啦'
​
# 添加自定义词汇
jieba.add_word('全球动画票房')
jieba.add_word('哪吒2')
​
# 对文本进行分词
a = jieba.lcut(sentence=str)
​
# 输出分词结果
print(a)

运行结果 :

未导入分词库的效果

import jieba
str='饺子导演的作品哪吒2要冲到全球动画票房榜首啦'
a=jieba.lcut(sentence=str)
print(a)

运行结果: 

TF-IDF

TF-IDF 是自然语言处理(NLP)和信息检索中常用的统计方法,用于衡量一个词在文档中的重要性,广泛应用于文本分析和信息检索任务中。以下是它们的详细介绍:


TF(词频,Term Frequency)

  • 定义:词频是指一个词在文档中出现的频率。

  • 计算公式

  • 作用:衡量一个词在文档中的重要性。词频越高,说明该词在文档中越重要。

  • 局限性:一些常见词(如“的”、“是”)在所有文档中出现的频率都很高,但它们并不一定具有实际意义。


IDF(逆文档频率,Inverse Document Frequency)

  • 定义:逆文档频率衡量一个词在整个语料库中的普遍性。如果一个词在很多文档中都出现,它的 IDF 值会较低;反之,如果它只在少数文档中出现,它的 IDF 值会较高。

  • 计算公式

    • 其中,D 是语料库,t 是词。

  • 作用:降低常见词的重要性,提高罕见词的重要性。

  • 局限性:如果一个词在语料库中从未出现过,IDF 值会变得非常大,因此通常会对分母加 1 进行平滑处理。


TF-IDF(词频-逆文档频率)

  • 定义:TF-IDF 是 TF 和 IDF 的结合,用于衡量一个词在文档中的重要性。它既考虑了词在文档中的频率,也考虑了词在整个语料库中的普遍性。

  • 计算公式

        

  • 作用

    • 如果一个词在文档中出现的频率高(TF 值高),但在整个语料库中出现的频率低(IDF 值高),那么它的 TF-IDF 值会很高,说明这个词在文档中非常重要。

    • 如果一个词在文档中出现的频率高,但在整个语料库中出现的频率也很高(如“的”、“是”),那么它的 TF-IDF 值会较低,说明这个词并不重要。

  • 应用场景

    • 文本分类

    • 信息检索

    • 关键词提取

    • 文档相似度计算


总结

  • TF:衡量词在文档中的频率。

  • IDF:衡量词在整个语料库中的普遍性。

  • TF-IDF:结合 TF 和 IDF,衡量词在文档中的重要性。

案例:从文本数据中提取并分析关键词的重要性

具体来说,它通过计算 TF-IDF(词频-逆文档频率) 来评估每个词在文档中的重要性,并找出最相关的关键词。

从文本数据task.txt中提取并分析关键词的重要性,具体要求如下

读取文本数据

  • 代码从 task.txt 文件中读取文本内容,并将其存储为 corpus(语料库)。

  • 目的:准备待分析的文本数据。

计算 TF-IDF

  • 使用 TfidfVectorizer 将文本数据转换为 TF-IDF 矩阵并打印出来。

  • 目的:量化每个词在文档中的重要性。

提取特征词

  • 通过 get_feature_names() 方法获取所有特征词(即词汇表中的单词)并打印出来。

  • 目的:获取所有被分析的词。

转换为 DataFrame

  • 将 TF-IDF 矩阵转换为 DataFrame,行索引为特征词,列索引为文档,并打印出来。

  • 目的:方便后续对 TF-IDF 值进行操作和分析。

提取特定文档的特征值

  • 提取第 6 列(索引为 5)的特征值,并转换为列表。

  • 目的:分析某一特定文档中每个词的重要性。

创建字典并排序

  • 将特征词与对应的 TF-IDF 值存入字典,并按 TF-IDF 值进行降序排序。

  • 目的:找出该文档中最重要的关键词。

测试输出

  • 打印排序后的第 3 个元素(即第 3 个最重要的关键词及其 TF-IDF 值)。

  • 目的:展示该文档中第 3 个最相关的关键词。

# 导入所需的库
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
​
# 打开文件并读取内容
inFile = open(r'.\task.txt')  # 打开文件
corpus = inFile.readlines()  # 读取文件中的所有行,存储在列表中
​
# 初始化TF-IDF向量化器
vectorizer = TfidfVectorizer()
​
# 对语料库进行TF-IDF向量化
tfidf = vectorizer.fit_transform(corpus)  # 将文本数据转换为TF-IDF矩阵
print('*'*20+'打印TF-IDF矩阵'+'*'*20)
print(tfidf)  # 打印TF-IDF矩阵
​
# 获取特征词列表
wordlist = vectorizer.get_feature_names()  # 获取所有特征词(即词汇表中的单词)
print('*'*20+'打印特征词列表'+'*'*20)
print(wordlist)  # 打印特征词列表
​
# 将TF-IDF矩阵转换为DataFrame
df = pd.DataFrame(tfidf.T.todense(), index=wordlist)  # 将TF-IDF矩阵转置并转换为DataFrame,行索引为特征词
print('*'*20+'打印DataFrame'+'*'*20)
print(df)  # 打印DataFrame
​
# 获取第6列(索引为5)的特征值列表
featurelist = df.iloc[:, 5].to_list()  # 获取第6列的特征值,并转换为列表
​
# 创建一个字典,将特征词与对应的特征值关联起来
resdict = {}
for i in range(0, len(wordlist)):
    resdict[wordlist[i]] = featurelist[i]  # 将特征词与对应的特征值存入字典
​
# 对字典按特征值进行降序排序
resdict = sorted(resdict.items(), key=lambda x: x[1], reverse=True)  # 按特征值从大到小排序
​
# 打印排序后的第3个元素(索引为2)
print('*'*20+'打印排序后的第3个元素'+'*'*20)
print(resdict[2])  # 打印排序后的第3个元素(即第3个最重要的特征词及其TF-IDF值)
运行结果:


网站公告

今日签到

点亮在社区的每一天
去签到