机器学习(TF-IDF)

一、TF-IDF

TF的概念:指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(一般是词频除以文章总词数),以防止它偏向长的文件。

词频(TF) =某个词在文章中的出现次数 **/**文章的总词数

IDF的概念:逆向文档频率。IDF的主要思想是:如果包含词条t的文档越少,IDF越大,则说明词条具有很好的类别区分能力。

逆文档频率(IDF)=log(语料库的文档总数 / (包含该词的文档数+1))

TF一IDF=词频(TF)×逆文档频率(IDF)

代码实现:

python 复制代码
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

data=open("task2_1.txt",'r')

x=data.readlines()

vt=TfidfVectorizer()
tfidf=vt.fit_transform(x)

print(tfidf)

wordlist=vt.get_feature_names()
print(wordlist)

df=pd.DataFrame(tfidf.T.todense(),index=wordlist)
print(df)

for i in range(len(x)):
    featurelist=df.iloc[:,i].to_list()

    resdict={}
    for j in range(0,len(wordlist)):
        resdict[wordlist[j]]=featurelist[j]
    resdict=sorted(resdict.items(),key=lambda x:x[1],reverse=True)
    print(resdict)

1.通过from sklearn.feature_extraction.text import TfidfVectorizer导入TF-IDF的方法

2.task2_1.txt的内容中可以将每一行的英文看作是一篇文章,求每一个词在其中的TF-IDF

3.通过vt=TfidfVectorizer()初始化一个vt的对象,通过vt.fit_transform(x)方法求出单词在每一行语句中的tf-idf

4.通过调用vt.get_feature_names()方法获取经过 TF-IDF 拟合后生成的词汇表(所有不重复的特征词)

二、红楼梦小说关键词提取(具体案例)

1.将红楼梦小说的内容进行分卷,将每一回的内容存取到txt文件中,以每一个回的名称来命名。

python 复制代码
import os
import jieba
import pandas as pd
file=open(r'.\红楼梦\红楼梦.txt',encoding="utf-8")
flag=0
juan_file=open(r'.\红楼梦\开头.txt','w',encoding="utf-8")
for line in file:
    if '卷 第' in line:
        juan_name=line.strip()+'.txt'
        path=os.path.join(r'.\红楼梦\分卷',juan_name)
        if flag==0:
            juan_file=open(path,'w',encoding="utf-8")
            flag=1
        else:
            juan_file.close()
            juan_file=open(path,'w',encoding="utf-8")
        continue
    if '手机电子书·大学生小说网' not in line:
        juan_file.write(line)
juan_file.close()
file.close()

通过每一回的名称都有'卷 第'这个字符串来定位切割,通过juan_name=line.strip()+'.txt'来命名文件

path=os.path.join(r'.\红楼梦\分卷',juan_name)来得到每个文件地址

2.将每一回的内容提取出来放到h_content中

python 复制代码
for roots,directories,files in os.walk(r'.\红楼梦\分卷'):
    for file in files:
        # 仅处理txt文件(避免遍历其他无关文件)
        if file.endswith('.txt'):
            # 拼接文件完整路径
            file_path = os.path.join(roots, file)
            h_root.append(file_path)  # 保存文件路径
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()
                h_content.append(content)  # 保存文件内容

3.使用jieba库加载红楼梦专属词库解决专有名词分词错误,使用jieba库的cut方法进行分词,用停用词StopwordsCN.txt对分词后的词库进行过滤。

python 复制代码
jieba.load_userdict(r'.\红楼梦\红楼梦词库.txt')
stopwords = pd.read_table(
    r'.\红楼梦\StopwordsCN.txt',
    encoding="utf-8",       # 若报错可改为encoding='gbk
)

file_to_jieba=open(r'.\红楼梦\分词汇总.txt','w',encoding="utf-8")
for index,row in my_set.iterrows():
#iterrows遍历行数据
    juan_ci=''#空的字符串,处理后的单词依次添加到juanci后面
# filePath = row['filePath']
    fileContent =row['file_content']
    segs=jieba.cut(fileContent)
#对文本内容进行分词,返回一个可遍历的迭代器
    for seg in segs:
#遍历每一个词
        if seg not in stopwords.stopword.values and len(seg.strip())>0:#剔除停用词和字符为o的内容
            juan_ci += seg+' '
#juan_ci=juan_ci+'电子书
    file_to_jieba.write(juan_ci+'\n')
file_to_jieba.close()

4.最后使用tf_idf的方法对得到的内容求出每个词的tf-idf

python 复制代码
from sklearn.feature_extraction.text import  TfidfVectorizer
data=open(r".\红楼梦\分词汇总.txt",'r',encoding="utf-8")

x=data.readlines()

vt=TfidfVectorizer()
tfidf=vt.fit_transform(x)

# print(tfidf)

wordlist=vt.get_feature_names()
相关推荐
慢半拍iii几秒前
ops-nn算子库深度解析:昇腾神经网络计算的基础
人工智能·深度学习·神经网络·ai·cann
程序员猫哥_2 分钟前
HTML 生成网页工具推荐:从手写代码到 AI 自动生成网页的进化路径
前端·人工智能·html
哈__3 分钟前
CANN优化Diffusion扩散模型推理:去噪过程与采样策略加速
人工智能
永远都不秃头的程序员(互关)5 分钟前
CANN DVPP赋能AIGC:硬件加速视觉处理,打造极致生成式视觉工作流
人工智能·aigc
JustDI-CM5 分钟前
AI学习笔记-提示词工程
人工智能·笔记·学习
悟纤6 分钟前
学习与专注音乐流派 (Study & Focus Music):AI 音乐创作终极指南 | Suno高级篇 | 第33篇
大数据·人工智能·深度学习·学习·suno·suno api
饭饭大王6666 分钟前
迈向智能体时代——构建基于 `ops-transformer` 的可持续 AI 系统
人工智能·深度学习·transformer
晚霞的不甘6 分钟前
CANN 支持强化学习:从 Isaac Gym 仿真到机械臂真机控制
人工智能·神经网络·架构·开源·音视频
哈__17 分钟前
CANN加速Image-to-Image转换:风格迁移与图像编辑优化
人工智能·计算机视觉
ujainu17 分钟前
解码昇腾AI的“中枢神经”:CANN开源仓库全景式技术解析
人工智能·开源·cann