首页 > 其他分享 >【文本挖掘】(三)文本表示

【文本挖掘】(三)文本表示

时间:2024-05-20 23:19:41浏览次数:21  
标签:表示 word np 文档 dict01 挖掘 文本 向量

文本表示的概念

  • 核心:将字符串以计算机形式进行表示出来,如向量化。
  • 分类
  • 离散/向量表示:词袋模型(独热编码、TF-IDF、N-gram)
  • 分布式表示:词嵌入word embedding,包括word2vec、Glove、ELMO、GPT、BERT等。
  • 基于矩阵:基于降维表示和基于聚类表示
  • 基于神经网络:CBOW、Skip-gram、NNLM、C&W

文本预处理

一般过程:
image

  1. 删除段前后空格
  2. 文本分段
  3. 识别断句符号,如", \ !"等,用断句符号标记句子
  4. 分词
  5. 词性标注
  6. 特征选取
  7. 设置特征词汇权重
  8. 形成向量空间模型

向量空间模型VSM: vector space model

权重计算

  • 布尔权重
  • 词频权重
  • TF-IDF

向量相似度量

向量内积

  • 普通形式

\[Sim(D_i,D_j)=\sum^n_k=1({t_ik}\times{t_jk}) \]

  • 归一化形式

\[Sim(D_i,D_j)=cos\theta=\frac{\sum^n_k=1({t_ik}\times{t_jk})}{ \sqrt{ \sum^n_{k=1}{t_{ik}} } \times \sqrt{ \sum^n_{k=1}{t_{jk}} } } \]

向量间的距离

  • 绝对值距离
  • 欧几里得距离
  • 切比雪夫距离

代码案例

案例1 计算文档Di=(0.2,0.4,0.11,0.06)和Dj=(0.14,0.21,0.026,0.34)的余弦相似度。

  • 使用内积函数dot()和范式函数linalg.norm()
import numpy as np
di=[0.2,0.4,0.11,0.06]
dj=[0.14,0.21,0.026,0.34]
dist1=np.dot(Di,Dj)/np.linalg.norm(Di)*np.linalg.norm(Dj)
  • 使用scipy
from scipy import spatial
dist1=1-spatial.distance.cosine(Di,Dj)
  • 使用sklearn
dfrom sklarn.metrics.pairwise import cosine_similarity
dist1=cosine_similar(Di.reshape(1,-1),Dj.reshape(1,-1))

案例2 计算两个句子的相似度

D1='我喜欢看电视,不喜欢看电影'
D2='我不喜欢看电视,也不喜欢看电影'

# 分词
split1=[ word for word in jieba.cut(D1) if word not in [',','。']]
split1=[ word for word in jieba.cut(D2) if word not in [',','。']]
# 列出所有的词
wordset=set(split1).union(split2)
# 统计词频
def computeTF(wordSet,split):
	tf=dict.fromkeys(wordSet,0)
	for word in split:
		tf[word]+=1
	return tf

tf1=computeTF(wordSet,split1)
tf2=computeTF(wordSet,split2)
# 词频向量
s1=list(tf1.values())
s2=list(tf2.values())

#计算余弦相似性
dist1=np.dot(s1,s2)/(np.linalg.norm(s1)*np.linalg.norm(s2))

文本表示方法

离散/向量表示

TF-IDF

\[词频(Term Frequency)=\frac{某个词在文章出现总次数}{文章的总词数}=\frac{某个词在文章出现总次数}{该训练文本出现最多次的词数} \]

\[逆文档频率(Inverse Document Frequency)=\log\frac{总样本数}{包含该词的文档数+1},其中,+1为了避免分母为0。 \]

词袋模型Big of Words

  • 基于BOW计算文档相似度的gensim实现
1.建立字典
from gensim.corpora import Dictionary
import jieba
str01='大鱼吃小鱼也吃虾米,小鱼吃虾米'
text01=[ [for word in jieba.cut(str,cut_all=Ture) if word note in [",","。","大鱼吃","大鱼吃小鱼"]]]

# Dictionary类用于建立word<->id映射关系,把所有单词取一个set(),并对set中每个单词分配一个id号的map。
dict01=Dictionary(text01)
dict01.dfs          # 字典{单词id,在多少文档中出现}
dict01.num_docs     # 文档数目
dict01.num_nnz      # 每个文件中不重复词个数的和
dict01.num_pos      # 所有词的个数
dict01.token2id     # 字典,{单词,对应id}
dict01.id2token()     #字典,{单词id,对应的单词}
# 向字典添加词条
dict01.add_documents([['猫','爱']])
dict01.token2id.keys()
# 转换为BOW稀疏向量
'''allow_update = False : 是否直接更新所用字典
   return_missing = False : 是否返回新出现的(不在字典中的)词'''
print(sum(text01,[]))
dict01_cp=dict01.doc2bow(sum(text01,[]),return_missing=True)

输出结果

[(0, 2), (1, 2)],表明在文档中id为0,1的词汇各出现了2次,至于其他词汇则没有出现
return_missing = True时,输出list of (int, int), dict of (str, int)
# 转换为BOW长向量 doc2idx
#doc2idx( # 转换为list of token_id
#    document : 用于转换的词条list
#    unknown_word_index = -1 : 为不在字典中的词条准备的代码
#输出结果:按照输入list的顺序列出所出现的各词条#ID
str="小鱼吃虾米"
text=[  word for word in jieba.cut(str)]
dict01.doc2idx(text)

输出结果

[3,1,4]
  • Sklearn.CountVectorizer
'''
class sklearn.feature_extraction.text.CountVectorizer(

    input = 'content' : {'filename', 'file', 'content'}filename为所需读入的文件列表, file则为具体的文件名称。

    encoding='utf-8' : 文档编码

    stop_words = None : 停用词列表,当analyzer == 'word'时才生效

    min_df / max_df : float in range [0.0, 1.0] or int, default = 1 / 1.0

    词频绝对值/比例的阈值,在此范围之外的将被剔除小数格式说明提供的是百分比,如0.05指的就是5%的阈值)

CountVectorizer.build_analyzer()   # 返回文本预处理和分词的可调用函数
'''

image
image
image

分布式表示

Word2Vec

Doc2Vec

标签:表示,word,np,文档,dict01,挖掘,文本,向量
From: https://www.cnblogs.com/Gimm/p/18202533

相关文章

  • 422是一个HTTP状态码,表示服务器理解客户端的请求,但无法处理该请求。这个状态码通常被
    422是一个HTTP状态码,表示服务器理解客户端的请求,但无法处理该请求。这个状态码通常被用于Web应用程序中的表单验证,其中服务器无法处理客户端提交的表单数据。具体来说,当一个客户端向服务器提交表单数据时,服务器首先会验证这些数据是否符合要求。如果数据验证失败,服务器会返回422......
  • 文件文本对比工具
    ​ 前言在码代码或做文档的时候,需要对比两个文件的差异,有版本管理工具的时候对比版本就可以,但有时总是有这样或那样的的意外,今天在网上找了几个这样的工具做下对比评测。如果你有更好的工具可以留言告诉我。 一、Meld这是一款开源的文件比对工具,支持Windows、Linux和m......
  • 【文本挖掘】(二)句法分析
    句法分析是机器翻译的核心数据结构,用于确定句子的句法结构或词汇之间的依存关系;完全句法分析部分句法分析基于规则的句法分析存在语法规则覆盖有限、系统可迁移性差等缺陷基于统计的句法分析主流基于PCFG的句法分析句法结构分析S表示句子(sentence),NP表示名词短......
  • CXO中的“X”是一种代称,代表公司里的一种特定职务。其中C表示首席(chief),O表示官员(offic
    【常识科普帖】你知道什么CEO、CTO、COO...的全称吗?生物药知识云享 2023-04-2206:31 上海前言Preface文 l 云享小助手  在职场中,我们经常能听到CEO这个职位称呼,那么除此之外的CTO、COO、CFO......又是什么职位的英文简称呢?关于企业管理岗位的英文简称你还知道多少?......
  • Python数据分析与挖掘实战(1-3章)
    非原创,仅个人关于《Python数据分析与挖掘实战》的学习笔记第一章基础略第二章数据分析简介基本概念元组、列表、字典、集合函数式编程:map()函数:定义一个函数,然后用map()逐一应用到map列表中的每个元素。map(lambdax+2:a)reduce()函数:用于递归计算。reduce(lambdax,......
  • flex布局文本居中,文本溢出自动换行的方法
    exportconstColoredItem=({item})=>{return(<divclassName={`w-fullflexitems-centerspace-x-1borderrounded`}style={{backgroundColor:item.color+"1a",borderColor:item.color,borde......
  • 短语挖掘与流行度、一致性及信息度评估:基于文本挖掘与词频统计|附数据代码
    全文链接:https://tecdat.cn/?p=36193原文出处:拓端数据部落公众号在信息爆炸的时代,文本数据呈现出爆炸式的增长,从新闻报道、社交媒体到学术论文,无处不在的文本信息构成了我们获取知识和理解世界的重要来源。然而,如何从海量的文本数据中提取有价值的信息,尤其是那些能够反映主题、......
  • shell脚本-正则表达式与文本处理器
    一、正则表达式1.正则表达式概述正则表达式REGEXP(RegularExpressions)由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符......
  • 2024-05-15:用go语言,考虑一个整数 k 和一个整数 x。 对于一个数字 num, 在其二进制表示
    2024-05-15:用go语言,考虑一个整数k和一个整数x。对于一个数字num,在其二进制表示中,从最低有效位开始,我们计算在x,2x,3x等位置处设定位的数量来确定其价值。举例说明,若对于x=1,num=13,则二进制表示为000001101,对应的价值为3。又如,当x=2,num=13,二进制表示依然为000001101,但对......
  • PYTHON、R对小说文本挖掘正则表达式分析案例
    原文链接:http://tecdat.cn/?p=5673原文出处:拓端数据部落公众号 《第二十二条军规》是美国作家约瑟夫·海勒创作的长篇小说,该小说以第二次世界大战为背景,通过对驻扎在地中海一个名叫皮亚诺扎岛(此岛为作者所虚构)上的美国空军飞行大队所发生的一系列事件的描写,揭示了一个非理性的......