1 文本分析
1.1文本分析简介
文本分析:文本分析是指对文本的表示及其特征项的选取;文本分析是文本挖掘、信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息。文本(text),与 讯息(message)的意义大致相同,指的是由一定的符号或符码组成的信息结构体,这种结构体可采用不同的表现形态,如语言的、文字的、影像的等等。文本是由特定的人制作的,文本的语义不可避免地会反映人的特定立场、观点、价值和利益。因此,由文本内容分析,可以推断文本提供者的意图和目的。
关键词:文本的表示,文本特征,文本分词,文本情感,文本语义
1.2结构、半结构、非结构数据概述
数据按照结构一般分为三种:结构化数据、非结构化数据和半结构化数据
1.结构化数据
定义:业界指关系模型数据,即以关系数据库表形式管理的数据
简析:虽然专业角度上看,结构化就是关系模型的说法并不准确,但针对目前业内现状,还是定义为关系模型最为妥善,因为它准确的代表了我们传统上最熟悉的企业业务数据。
结构化的数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。
举个例子:成绩单就是结构化数据
2.半结构化数据
定义:非关系模型的、有基本固定结构模式的数据,例如日志文件、XML文档、JSON文档、Email等。
举个例子
<person>
<name>A</name>
<age>13</age>
<gender>female</gender>
</person>
3.非结构化数据
定义:没有固定模式的数据,如WORD、PDF、PPT、EXL,各种格式的图片、视频等。
简析:区分半结构化与非结构化的意义在于,对两者的处理方法是不同的,非结构化数据大多采用内容管理方法,而半结构化数据基本没有有效的管理方法。
举个例子:文本文件:文字处理、电子表格、演示文稿、电子邮件、日志。
社交媒体:来自新浪微博、微信、QQ、Facebook,Twitter,LinkedIn等平台的数据。
网站: YouTube,Instagram,照片共享网站。
移动数据:短信、位置等。
通讯:聊天、即时消息、电话录音、协作软件等。
媒体:MP3、数码照片、音频文件、视频文件。
业务应用程序:MS Office文档、生产力应用程序。
典型的机器生成的非结构化数据包括:
卫星图像:天气数据、地形、军事活动。
科学数据:石油和天然气勘探、空间勘探、地震图像、大气数据。
数字监控:监控照片和视频。
总结
(1)结构化、半结构化、非结构化其实是按照数据格式分类。
(2)严格讲,结构化与半结构化数据都是有基本固定结构模式的数据
(3)半结构与非结构化数据与目前流行的大数据之间只是有领域重叠的关系,本质讲两者并无必然联系。
(4)业界有将大数据认同为半结构/非结构化数据,是因为大数据技术最初是在半结构化数据领域发挥作用,其本质是将数据处理技术与数据格式混淆,是不正确的。
结构化数据,简单来说就是数据库。结合到典型场景中更容易理解,比如企业ERP、财务系统;医疗HIS数据库;教育一卡通;政府行政审批;其他核心数据库等。这些应用需要哪些存储方案呢?基本包括高速存储应用需求、数据备份需求、数据共享需求以及数据容灾需求。
非结构化数据,包括视频、音频、图片、图像、文档、文本等形式。具体到典型案例中,像是医疗影像系统、教育视频点播、视频监控、国土GIS、设计院、文件服务器(PDM/FTP)、媒体资源管理等具体应用,这些行业对于存储需求包括数据存储、数据备份以及数据共享等。
半结构化数据,包括邮件、HTML、报表、资源库等等,典型场景如邮件系统、WEB集群、教学资源库、数据挖掘系统、档案系统等等。这些应用对于数据存储、数据备份、数据共享以及数据归档 等基本存储需求。
参考文献:
何小朝. 纵横大数据[M]. 电子工业出版社, 2014.
---------------------
参考文章:
https://blog.csdn.net/qq_25353433/article/details/81451310
1.3文本分析应用
文本分析的应用场景:词云,词频, 舆情分析,智能客服,情感分析,词语网路分析,信息分类,意见提取,文本聚类,知识图谱等等不一而足。
2 中文分词
中文分词工具:1 jieba
" 结巴"中文分词:做最好的Python中文分词组件 “Jieba”
更新时间:2020年
官网地址:https://github.com/fxsjy/jieba
特点:
支持三种分词模式:
精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
支持繁体分词
支持自定义词典
2 SnowNLP
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的
更新时间:2017年
官网地址:https://github.com/isnowfy/snownlp
特点:
中文分词(Character-Based Generative Model)
词性标注(TnT 3-gram 隐马)
情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)
文本分类(Naive Bayes)
网友测试:特别慢
3 北京大学PKUse
官网有关于PKUse、THULAC、jieba的对比情况,可参考
pkuseg:一个多领域中文分词工具包
更新时间:2019年
官网地址:https://github.com/lancopku/pkuseg-python#%E8%AE%BA%E6%96%87%E5%BC%95%E7%94%A8
特点:
多领域分词。不同于以往的通用中文分词工具,此工具包同时致力于为不同领域的数据提供个性化的预训练模型
更高的分词准确率。
支持用户自训练模型。
支持词性标注。
4 清华大学THULAC
官网有关于LTP、THULAC、jieba、ICTCLAS的对比情况,可参考
THULAC清华大学:一个高效的中文词法分析工具包
更新时间:2018年
官网地址:https://github.com/thunlp/THULAC-Python
THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。
THULAC具有如下几个特点:
能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。
准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。
速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。
5 HanLP
HanLP面向生产环境的多语种自然语言处理工具包,基于 TensorFlow 2.0,目标是普及落地最前沿的NLP技术
更新时间:2020年
官网地址:http://hanlp.com/
Github地址:https://github.com/hankcs/HanLP
特点:
HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。
6 FoolNLTK
FoolNLTK可能不是最快的开源中文分词,但很可能是最准的开源中文分词
更新时间:2018年
官网地址:https://github.com/rockyzhengwu/FoolNLTK/blob/master/README_CH.md
特点:
可能不是最快的开源中文分词,但很可能是最准的开源中文分词
基于BiLSTM模型训练而成
包含分词,词性标注,实体识别, 都有比较高的准确率
用户自定义词典
可训练自己的模型
批量处理
7 哈工大LTP
语言技术平台(Language Technology Platform,LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。
LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口、可视化工具,并且能够以网络服务(Web Service)的形式进行使用。
更新时间:2019年
官方网站:https://www.ltp-cloud.com/
GIthub地址:https://github.com/HIT-SCIR/ltp
特点:
主页上给过调用接口,每秒请求的次数有限制。
8 斯坦福分词器CoreNLP
Stanford CoreNLP提供了一组用Java编写的自然语言分析工具。
更新时间:2020年
Github地址:https://github.com/stanfordnlp/CoreNLP
特点:
斯坦福的各个工具都有相关文献可以深入学习原理,这点是一大优势。而且算法基本上都是最新或者最优的。java编写。
9 BaiduLac
Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,在单个模型中完成中文分词、词性标注、专名识别任务。
更新时间:2019年
Github地址:https://github.com/baidu/lac
特点:
工程中使用
依赖Paddle v0.14.0版本。
定制化功能
参考文章:
https://blog.csdn.net/zzzzlei123123123/article/details/104227223
10 jcseg中文分词器
jcseg 是使用 Java 开发的一款开源的中文分词器, 使用 mmseg 算法. 分词准确率高达
98.4%, 支持中文人名识别, 同义词匹配, 停止词过滤等。
地址:https://gitee.com/lionsoul/jcseg
jcseg 支持三种切分模式:
(1). 简易模式:FMM算法,适合速度要求场合。
(2). 复杂模式-MMSEG四种过滤算法,具有较高的岐义去除,分词准确率达到了98.41%。
(3). 检测模式:只返回词库中已有的词条,很适合某些应用场合。(1.9.4开始)
https://gitee.com/lionsoul/jcseg
特点:
就分词效率而言,简易模式速度最快
jcseg词库配置丰富,自我感觉功能最强大,详见jcseg开发文档;
3 中文关键词提取
文本关键词抽取,是对文本信息进行高度凝练的一种有效手段,通过3-5个词语准确概括文本的主题,帮助读者快速理解文本信息。目前,用于文本关键词提取的主要方法有四种:基于TF-IDF的关键词抽取、基于TextRank的关键词抽取、基于Word2Vec词聚类的关键词抽取,以及多种算法相融合的关键词抽取。笔者在使用前三种算法进行关键词抽取的学习过程中,发现采用TF-IDF和TextRank方法进行关键词抽取在网上有很多的例子,代码和步骤也比较简单,但是采用Word2Vec词聚类方法时网上的资料并未把过程和步骤表达的很清晰。因此,本文分别采用TF-IDF方法、TextRank方法和Word2Vec词聚类方法实现对专利文本(同样适用于其它类型文本)的关键词抽取,通过理论与实践相结合的方式,一步步了解、学习、实现中文文本关键词抽取。
具体详情本文不做赘述,具体可自行了解,本次采用Word2Ve进行词聚类的关键词抽取。
4 相似度计算
相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大。
对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度。下面介绍一个详细成熟的向量空间余弦相似度方法计算相似度
向量空间余弦相似度(Cosine Similarity)
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。
上图两个向量a,b的夹角很小可以说a向量和b向量有很高的的相似性,极端情况下,a和b向量完全重合。如下图:
上图中:可以认为a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者说是相等的。如果a和b向量夹角较大,或者反方向。
如上图三: 两个向量a,b的夹角很大可以说a向量和b向量有很底的的相似性,或者说a和b向量代表的文本基本不相似。那么是否可以用两个向量的夹角大小的函数值来计算个体的相似度呢?
向量空间余弦相似度理论就是基于上述来计算个体相似度的一种方法。
参考文章:
https://www.jianshu.com/p/5619e73e1322
注:以后会详细介绍此方法,如果文本十分相似,只有几个字对不上,建议使用编辑距离。
5 文本分析架构图
思路:第一版本先使用无监督学习,将项目中PDF转换为TXT---->使用jcesg进行中文分析---->停用词维护---->中文关键词提取---->相似度计算---->输出文本相似度比值
第二版本使用有监督学习训练模型,将项目中PDF转换为TXT---->使用embedding进行文本提取---->bert文本模型预训练---->词义分析---->输出文本训练模型
6 文本分析感想
文本分析NLP(自然语言处理)是人工智能的一个领域,研究计算机和人类语言之间的交互,特别是如何编程计算机来处理和分析大量的自然语言数据。NLP经常被应用于文本数据的分类。文本分类是根据文本数据的内容给文本数据分配类别的问题。文本分类最重要的部分是特征工程:从原始文本数据为机器学习模型创建特征的过程。
最建议使用Python训练模型,各个项目情况不同,可以使用现有类库的情况下,微调模型。
现在提取文字embedding文本相似要得到好的结果基本离不开bert这类的预训练模型。