机器学习(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()
相关推荐
档案宝档案管理17 小时前
权限分级+加密存储+操作追溯,筑牢会计档案安全防线
大数据·网络·人工智能·安全·档案·档案管理
数据光子17 小时前
【YOLO数据集】国内交通信号检测
人工智能·python·安全·yolo·目标检测·目标跟踪
霍格沃兹测试开发学社测试人社区17 小时前
GitLab 测试用例:实现 Web 场景批量自动化执行的方法
人工智能·智能体
Mintopia17 小时前
🤖 AI 应用自主决策的可行性 — 一场从逻辑电路到灵魂选择的奇妙旅程
人工智能·aigc·全栈
百***787517 小时前
2026 优化版 GPT-5.2 国内稳定调用指南:API 中转实操与成本优化
开发语言·人工智能·python
:mnong17 小时前
辅助学习神经网络
人工智能·神经网络·学习
jinyeyiqi202617 小时前
城市噪声监测设备技术解析及智慧城市应用方案 金叶仪器全场景适配的城市噪声监测设备
人工智能·智慧城市
光锥智能17 小时前
蚂蚁阿福月活用户已达3000万,OpenAI跟进发布ChatGPT Health
人工智能·chatgpt
空山新雨后、17 小时前
Masked AutoEncoder(MAE)详解:高 Mask 率如何造就强视觉表征
人工智能·深度学习·chatgpt·多模态