机器学习(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()
相关推荐
yurenpai(27届找实习中)14 小时前
从零读懂 AI 智能客服(一):模块职责与 SSE 聊天链路(后端架构)
java·人工智能·架构·langchain4j
别动我齐刘海15 小时前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶
Behaviour15 小时前
Unity AI 生态横评对比:官方 AI Beta / Unity CLI / 团结 Codely / 社区 MCP 四大阵营选型
人工智能·unity·ai·游戏引擎·aigc·ai编程
盈飞无限15 小时前
AI智能SPC软件,制造业质量数字化转型核心
人工智能
狂云歌15 小时前
2025年读书回顾,AI+游戏+历史
人工智能·学习·游戏
码视野15 小时前
基于 Vue3 + Element Plus 的【企业级 AI 智能体工作流与私有知识库 (RAG) 协同平台】设计与实现(附完整源码与PRD)
人工智能·vue3
玹外之音15 小时前
Spring AI + Elasticsearch 向量存储实战:从零构建智能文档检索系统
人工智能·spring·elasticsearch
CHEEVEN_QY15 小时前
B2B制造企业的AI搜索信息基建:llms.txt、Schema与FAQ落地实践
人工智能·faq·b2b制造
DS随心转小程序15 小时前
AI pdf 数字化文档落地攻略,靠 AI 导出鸭补齐转换短板,从痛点到实测详解智能化文档导出逻辑
人工智能·豆包·deepseek·ai导出鸭