精华内容
下载资源
问答
  • 文本关联性分析
    千次阅读
    2020-11-30 07:16:25

    l

    风险管理

    无论是哪个行业,风险分析不足通常都是失败的主要原因,在金融行业尤其如此。采用基于文本挖掘技术的风险管理软件可以显着提高降低风险的能力,实现数千个来源的文本文档的完整管理。

    l

    知识管理

    管理大量文本文档时,一个很大的问题就是——无法快速地找到重要的信息。例如,对于医疗行业来说,研发一个新的产品可能同时需要近十年的基因组学和分子技术研究报告。此时,基于文本挖掘的知识管理软件为此种“信息过剩”情况提供了有效的解决方案。

    l

    网络犯罪预防

    如今,互联网的匿名性和网络交流的便利性使得网络犯罪的数量大大提升。但是,文本挖掘情报和反犯罪应用的发展让政府能更好地预防此类案件的发生。

    l

    客户服务

    文本挖掘和自然语言处理是在客户服务领域常被使用的技术。如今,利用调查、故障单、用户反馈等有效信息,文本挖掘技术可以用来改善客户体验,为客户提供快速高效的解决方案,以期减少客户对帮助中心的依赖程度。

    l

    通过索赔调查进行欺诈检测

    对任何采集信息作为文本的行业来说,文本挖掘是必不可少的技术之一。保险公司正在利用文本挖掘技术,将文本分析结果与结构化数据相结合,以防止欺诈和迅速处理索赔。

    l

    情境广告

    数字广告是文本挖掘的新兴领域。Admantx公司将文本挖掘技术定为上下文重定向的核心引擎,并因此取得了巨大的成功。与传统的基于cookie的方法相比,上下文广告有更高的准确性,并完全保护了客户的隐私。

    l

    商业智能

    在公司的决策制定上,文本挖掘技术起了极大的作用。该技术使得数据分析师面对庞大的内部和开源数据时,能快速地得到答案。例如,诸如Cogito的智能平台能够监控成千个数据来源并分析大量数据,以便从中提取相关信息。

    l

    垃圾邮件过滤

    对于互联网提供商来说,垃圾邮件增加了服务管理和软件更新的成本;对于用户来说,垃圾邮件是病毒的入口,是浪费生产时间的元凶。文本挖掘技术可以提高基于统计的过滤方法的有效性,以达到过滤垃圾邮件的目的。

    l

    社交媒体数据分析

    如今,社交媒体是大多数非结构化数据的产源地。公司可以使用这些非结构化数据去分析和预测客户需求并了解客户对其品牌的看法。通过分析大量非结构化数据,文本分析能够提取意见,了解情感和品牌之间的关系,以帮助公司的发展。

    由灵玖软件研发的NLPIR大数据语义智能分析平台是满足大数据挖掘对语法、词法和语义的综合应用。NLPIR大数据语义智能分析平台是根据中文数据挖掘的综合需求,融合了网络精准采集、自然语言理解、文本挖掘和语义搜索的研究成果,并针对互联网内容处理的全技术链条的共享开发平台。

    NLPIR大数据语义智能分析平台主要有精准采集、文档转化、新词发现、批量分词、语言统计、文本聚类、文本分类、摘要实体、智能过滤、情感分析、文档去重、全文检索、编码转换等十余项功能模块,平台提供了客户端工具,云服务与二次开发接口等多种产品使用形式。各个中间件API可以无缝地融合到客户的各类复杂应用系统之中,可兼容Windows,Linux, Android,Maemo5, FreeBSD等不同操作系统平台,可以供Java,Python,C,C#等各类开发语言使用。

    更多相关内容
  • 文本相似性分析、聚类和分类多基于特征词,由于汉语词之间无分隔符,汉语分词及高维特征空间的处理等基础工作必然引起高计算费用问题。探索了一种在不使用特征词的条件下,使用汉字间的关系进行文本相似性分析的研究...
  • 详解Python文本操作相关模块linecache——通过使用缓存在内部尝试优化以达到高效从任何文件中读出任何行。主要方法:linecache.getline(filename, lineno[, module_globals]):获取指定行的内容linecache.clearcache...

    详解Python文本操作相关模块

    linecache——通过使用缓存在内部尝试优化以达到高效从任何文件中读出任何行。

    主要方法:

    linecache.getline(filename, lineno[, module_globals]):获取指定行的内容

    linecache.clearcache():清除缓存

    linecache.checkcache([filename]):检查缓存的有效性

    dircache——定义了一个函数,使用缓存读取目录列表、使用目录的mtime来实现缓存失效。此外还定义了标注目录的方法。

    主要方法:

    dircache.reset():重置目录缓存。

    dircache.listdir(path):返回path的目录列表。除非path改变,否则再次调该方法会会重复读目录结构。

    dircache.opendir(path):和listdir功能相同。存在的目的是为了后向兼容。

    dircache.annotate(head,list):假设list是相对于head的路径列表,那么在合适的位置给每个是目录的路径添加“/”

    filecmp——定义了文件和目录比较的函数。

    主要方法:

    filecmp.cmp(f1, f2[, shallow]):比较两个文件是非相等

    filecmp.cmpfiles(dir1, dir2, common[, shallow]):比较两个目录下的相同文件名的文件是非相等。

    类: class filecmp.dircmp(a, b[, ignore[, hide]]):构建一个新的目录比较对象,比较a和b。

    fileinput——实现了辅助类和方法来帮助实现对标准输入或一串文本快速操作。

    主要方法:

    fileinput.input([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]]):创建一个 FileInput实体。

    fileinput.filename():返回当前读取的文件名

    fileinput.lineno():返回累积读取的行数

    fileinput.nextfile():关闭当前行,下个迭代会跳到去读取下一个文件的第一行。

    类: class fileinput.FileInput([files[, inplace[, backup[, bufsize[, mode[, openhook]]]]]])

    os.path——包括路径以及文件属性方面的操作。

    主要方法:

    os.path.abspath(path):返回path的绝对路径

    os.path.dirname(path):返回path的目录名称

    os.path.exists(path):判断路径是否存在

    os.path.getatime(path):返回path上次访问的时间

    os.path.getmtime(path):返回path上次修改时间

    shutil——提供了一些文件和文件集方面的高级操作。

    主要方法:

    shutil.copyfileobj(fsrc, fdst[, length]):将类文件对象fsrc的内容复制到类文件对象fdst

    shutil.copyfile(src, dst):将文件src的内容(不包括元数据)的内容复制到文件dst

    shutil.copymode(src, dst):将src的权限位复制给dst

    shutil.copystat(src, dst):复制权限位、最近访问时间、最近修改时间和flags。

    shutil.copy(src, dst):复制文件src到文件或目录dst。权限位也会被复制。

    shutil.copy2(src, dst):和copy()不同之处是还会复制元数据。类似先copy(),再copystat()

    shutil.rmtree(path[, ignore_errors[, onerror]]):删除整个目录树

    shutil.move(src, dst):递归移动文件或路径

    除了操作一般文件,还能操作归档文件

    shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]]):创建归档文件。

    tempfile—— 生成临时文件和目录

    主要方法:

    tempfile.TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=”[, prefix='tmp'[, dir=None]]]]]):返回一个能够作为临时存储区域的类文件对象。

    tempfile.mkstemp([suffix=”[, prefix='tmp'[, dir=None[, text=False]]]]):以尽可能最安全的方式创建一个临时文件。

    stat——返回文件的系统状态信息等。

    struct——二进制文件的操作。包括二进制数据类型和str之间的转换。

    除此之外,还有其他专门针对特定类型文件(类文件)操作的模块。比如: lxml、CSV、 zipfile、 tarfile等。

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    展开全文
  • 主要介绍了Python实现购物评论文本情感分析操作,结合实例形式分析了Python使用中文文本挖掘库snownlp操作中文文本进行感情分析相关实现技巧与注意事项,需要的朋友可以参考下
  • 该专着充满了示例代码,这些代码复制了最近研究论文中的文本分析任务。在专着的第一部分中,我们提供了 Python 入门指南。 我们首先描述 Anaconda,它是 Python 的一个发行版,它提供了文本分析所需的库及其安装。 ...
  • 处理相关技术将在医学文本分析和挖掘中发挥重要作用。 为了更好地探索和利用医学文本,特别是电子病历的半结构化和非结构化信 息,对其中非结构化自由文本进行标准化和结构化非常的重要,而医疗信息对时间 特征...
  • 在长文本的方面级情感分析中,由于长文本存在一定冗余和噪声大的问题,导致现有的方面级情感分析方法对于长文本中方面相关信息的特征提取不够充分,分类不精准;在方面分层为粗粒度和细粒度方面的数据集上,现有的...
  • 我们在日常文本处理中,经常会将数据结构保存在列表中,如果将列表中的项进行关联,创建我们想要的字典结构,存取就会十分方便! 示例详解 比如说将List = ['Jerry 20 male 010', 'Alice 30 female 020', 'David 40 ...
  • 我们接下来表明,与审计员相关的 MD&A 相似与 MD&A 可读性呈正相关,并且市场对与审计员相关的 MDA 修改做出React。 这些结果提供了适度的证据,表明与审计师相关的 MD&A 相似可能会提高 MD&A 的披露质量,这与...
  • 文本自动分类的相关技术是数据挖掘的一个分枝, K-近邻法是常用的文本分类算法之一。在研究K-近邻法的基础上, 根据其使用情况分析了K-近邻法的不足之处, 在满足一定的判定函数前提下, 提出改进后的K-近邻法。改进后的...
  • 我们提出了一个系统,它给出了两个语句之间的等价程度,即语义文本相似 (STS)。 给定两个文本片段,系统的目标是确定它们的语义相似,即它们在含义方面的相似程度。 我们的系统使用四种不同的文本相似度量: ...
  • Python 实现文本共现网络分析

    万次阅读 多人点赞 2021-01-23 19:13:30
    前两天简单地做了一个文本挖掘实战分析,里面提到了共现分析,但是并没有完成,有些遗憾 经过查阅资料,最终还是粗糙地完成了这个分析 对于共现分析 共词网络方法在知识网络研究中应用普遍,最为常见的就是利用...

    前言

    前两天简单地做了一个文本挖掘实战分析,里面提到了共现分析,但是并没有完成,有些遗憾

    在这里插入图片描述
    经过查阅资料,最终还是粗糙地完成了这个分析

    对于共现分析

    共词网络方法在知识网络研究中应用普遍,最为常见的就是利用论文关键词及其共现关系构建共词矩阵,进而映射为共词网络并可视化,从而来揭示某一学科某一领域某一主题的研究热点与趋势、知识结构与演化等。引自:共词网络的结构与演化-概念与理论进展

    其基本含义:在大规模语料中,若两个词经常共同出现(共现)在截取的同一单元(如一定词语间隔/一句话/一篇文档等)中,则认为这两个词在语义上是相互关联的,而且,共现的频率越高,其相互间的关联越紧密。

    在这里插入图片描述
    图片来自:CiteSpace关键词共现图谱含义详细解析

    两个词共同出现的次数越多,网络图中两个词语节点连线越粗,也就是共现的次数为边上的权值

    其次,单个词出现的次数越多,在网络图中节点越大,若一个词与许多词均有联系,则这个词会在网络图的中心区域。

    在文本挖掘中,有共现矩阵的概念,如下

    ·I like deep learning.
    ·I like NLP.
    ·I enjoy modeling.
    

    在这里插入图片描述


    Python 代码实现

    数据采用的还是 大江大河2弹幕数据

    已经对数据做了文本去噪、去重、过滤等清洗

    处理好的弹幕数据.xlsx
    在这里插入图片描述

    import pandas as pd
    import numpy as np
    import os
    import jieba 
    
    def my_cut(text): 
        
        my_words = ['大江大河']    
        for i in my_words:
            jieba.add_word(i)
            
        # 加载停用词
        stop_words = [] 
        with open(r"C:\\Users\\Administrator\\Desktop\\停用词.txt", 'r',encoding='utf-8') as f:
           lines = f.readlines()
           for line in lines:
               stop_words.append(line.strip())
        # stop_words[:10]
               
        return [w for w in jieba.cut(text) if w not in stop_words and len(w)>1]
    
    
    
    def str2csv(filePath, s, x):
        '''
        将字符串写入到本地csv文件中
        :param filePath: csv文件路径
        :param s: 待写入字符串(逗号分隔格式)
        '''
        if x=='node':
            with open(filePath, 'w', encoding='gbk') as f:
                f.write("Label,Weight\r")
                f.write(s)
            print('写入文件成功,请在'+filePath+'中查看')
        else:
            with open(filePath, 'w', encoding='gbk') as f:
                f.write("Source,Target,Weight\r")
                f.write(s)
            print('写入文件成功,请在'+filePath+'中查看')
    
    
    
    def sortDictValue(dict, is_reverse):
        '''
        将字典按照value排序
        :param dict: 待排序的字典
        :param is_reverse: 是否按照倒序排序
        :return s: 符合csv逗号分隔格式的字符串
        '''
        # 对字典的值进行倒序排序,items()将字典的每个键值对转化为一个元组,key输入的是函数,item[1]表示元组的第二个元素,reverse为真表示倒序
        tups = sorted(dict.items(), key=lambda item: item[1], reverse=is_reverse)
        s = ''
        for tup in tups:  # 合并成csv需要的逗号分隔格式
            s = s + tup[0] + ',' + str(tup[1]) + '\n'
        return s
    
    
    def build_matrix(co_authors_list, is_reverse):
        '''
        根据共同列表,构建共现矩阵(存储到字典中),并将该字典按照权值排序
        :param co_authors_list: 共同列表
        :param is_reverse: 排序是否倒序
        :return node_str: 三元组形式的节点字符串(且符合csv逗号分隔格式)
        :return edge_str: 三元组形式的边字符串(且符合csv逗号分隔格式)
        '''
        node_dict = {}  # 节点字典,包含节点名+节点权值(频数)
        edge_dict = {}  # 边字典,包含起点+目标点+边权值(频数)
        # 第1层循环,遍历整表的每行信息
        for row_authors in co_authors_list:
            row_authors_list = row_authors.split(' ') # 依据','分割每行,存储到列表中
            # 第2层循环
            for index, pre_au in enumerate(row_authors_list): # 使用enumerate()以获取遍历次数index
                # 统计单个词出现的频次
                if pre_au not in node_dict:
                    node_dict[pre_au] = 1
                else:
                    node_dict[pre_au] += 1
                # 若遍历到倒数第一个元素,则无需记录关系,结束循环即可
                if pre_au == row_authors_list[-1]:
                    break
                connect_list = row_authors_list[index+1:]
                # 第3层循环,遍历当前行词后面所有的词,以统计两两词出现的频次
                for next_au in connect_list:
                    A, B = pre_au, next_au
                    # 固定两两词的顺序
                    # 仅计算上半个矩阵
                    if A==B:
                        continue
                    if A > B:
                        A, B = B, A
                    key = A+','+B  # 格式化为逗号分隔A,B形式,作为字典的键
                    # 若该关系不在字典中,则初始化为1,表示词间的共同出现次数
                    if key not in edge_dict:
                        edge_dict[key] = 1
                    else:
                        edge_dict[key] += 1
        # 对得到的字典按照value进行排序
        node_str = sortDictValue(node_dict, is_reverse)  # 节点
        edge_str = sortDictValue(edge_dict, is_reverse)   # 边
        return node_str, edge_str
    
    
    if __name__ == '__main__':
        os.chdir(r'C:\Users\Administrator\Desktop')
        filePath1 = r'C:\Users\Administrator\Desktop\node.csv'
        filePath2 = r'C:\Users\Administrator\Desktop\edge.csv'
        # 读取csv文件获取数据并存储到列表中
        df = pd.read_excel('处理好的弹幕数据.xlsx')
        df_ = [w for w in df['弹幕'] if len(w)>20]
        co_ist = [ " ".join(my_cut(w)) for w in df_] 
        # 根据共同词列表, 构建共现矩阵(存储到字典中), 并将该字典按照权值排序
        node_str, edge_str = build_matrix(co_ist, is_reverse=True)
        #print(edge_str)
        # 将字符串写入到本地csv文件中
        str2csv(filePath1,node_str,'node')
        str2csv(filePath2,edge_str,'edge')
    

    在这里插入图片描述

    继续处理,这里只要 Weight 大于 3 的数据

    import pandas as pd
    edge_str = pd.read_csv('edge.csv',encoding='gbk')
    edge_str.shape
    
    edge_str1 = edge_str[edge_str['Weight']>3]
    edge_str1.shape
    
    Source = edge_str1['Source'].tolist()
    Target = edge_str1['Target'].tolist()
    co = Source + Target
    co =list(set(co))
    
    node_str = pd.read_csv('node.csv',encoding='gbk')
    #node_str
    
    node_str=node_str[node_str['Label'].isin(co)]
    node_str['id']=node_str['Label']
    node_str = node_str[['id','Label','Weight']] # 调整列顺序
    #node_str
    
    node_str.to_csv(path_or_buf="node.txt", index=False) # 写入csv文件
    edge_str1.to_csv(path_or_buf="edge.txt", index=False) # 写入csv文件
    

    最终得到的数据

    在这里插入图片描述
    在这里插入图片描述

    导入Gephi 制作网络图

    制作网络图的过程 可参见 【绘制关系网络图】Gephi 入门使用

    最终效果

    在这里插入图片描述

    展开全文
  • 一、文本情感倾向分析 1. 内容 通过算法去判断一段文本、评论的情感倾向,从而快速地了解文本原作者的主观情绪。情感分析的结果可以用于舆情监控、信息预测,或用于判断产品的口碑,进而帮助生产者改进产品。 2. ...

    一、文本情感倾向分析

    1. 内容

    通过算法去判断一段文本、评论的情感倾向,从而快速地了解文本原作者的主观情绪。情感分析的结果可以用于舆情监控、信息预测,或用于判断产品的口碑,进而帮助生产者改进产品。

    2. 难点

    1. 文本特征较难提取,文字讨论的主体可能是人、商品、事件。
    2. 文本较难规范化。
    3. 词与词之间有联系,关联关系纳入模型中不容易。
    4. 不带情感色彩的停用词会影响文本情感打分。
    5. 中文复杂,一个词在不同语境下可能表达完全不一样的情感含义,“冬天能穿多少穿多少,夏天能穿多少穿多少。”
    6. 不同语义差别巨大,比如“路上小心点”。
    7. 否定词的存在“我其实不是很喜欢你”。
    8. 多维情绪识别。

    3. 方法

    3.1 情感词典
    1. 质量良好的中文情感词典非常少。
    2. 不带情感的停用词会影响情感打分。
    3. 中文博大精深,词性的多变影响准确性。
    4. 无法结合上下文分析情感。

    在这里插入图片描述

    3.2 高维向量模型
    1. 解决了多维语义问题。
    2. 可利用强大的机器学习,深度学习学习模型。

    在这里插入图片描述

    二、向量表示

    1. TF-IDF向量表示

    1.1 定义

    TF-IDF:Term Frequency - Inverse Document Frequency,即“词频-逆文本频率”。它由两部分组成,TF和IDF。TF-IDF是一种加权技术,采用一种统计方法,根据字词在文本中出现的次数和在整个语料中出现的文档频率来计算一个字词在整个语料中的重要程度。

    优点:能过滤掉一些常见的却无关紧要的词语,同时保留整个文本的重要词语,简单快速,容易理解。
    缺点:
    (1)没有考虑特征词的位置因素对文本的区分度,词条出现在文档的不同位置时,对区分度的贡献大小是不一样的。
    (2)按照传统TF-IDF,往往一些生僻词的IDF(反文档频率)会比较高、因此这些生僻词常会被误认为是文档关键词。
    (3)传统TF-IDF中的IDF部分只考虑了特征词与它出现的文本数之间的关系,而忽略了特征项在一个类别中不同的类别间的分布情况。
    (4)对于文档中出现次数较少的重要人名、地名信息提取效果不佳。

    IDF:InversDocument Frequency,表示计算倒文本频率。文本频率是指某个关键词在整个语料所有文章中出现的次数。倒文本频率是文本频率的倒数,主要用于降低所有文档中一些常见却对文档影响不大的词语的作用。IDF反应了一个词在所有文本中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低,而反过来如果一个词在比较少的文本中出现,那么它的IDF值应该高。比如100篇文章里的某一篇文章大量的出现了“机器学习”,说明“机器学习”是关键词,应该给它较高的权重,而比如100篇文章里100篇都大量出现了“的”,”你“,“我”,说明这是不重要的词。

    1.2 TF-IDF的实现

    使用sklearn库来计算tfidf值

    import pandas as pd
    from sklearn.feature_extraction.text import TfidfVectorizer
    
    words = ['它由两部分组成,TF和IDF。TF-IDF是一种加权技术,采用一种统计方法,根据字词在文本中出现的次数和在整个语料中出现的文档频率来计算一个字词在整个语料中的重要程度......']
    
    tfidf_vec = TfidfVectorizer(stop_words={'english'})
    """
    相关参数
    token_pattern:使用正则表达式进行分词。
    max_df/min_df:用于过滤出现太多的无意义词语。
    stop_words:list类型,直接过滤指定的停用词。
    vocabulary:dict类型,值使用特定的词汇,制定对应关系。
    """
    tfidf_maxtrix = tfidf_vec.fit_transform(valid_words)
    
    # 输出generator
    print(tfidf_matix)
    
    # 得到语料库所有不重复的词
    print(tfidf_vec.get_feature_names())
    
    # 得到每个单词对应的id值
    print(tfidf_vec.vocabulary_)
    
    # 得到每个句子对应的向量
    print(tfidf_matrix.toarray())
    

    使用jieba实现TF-IDF算法

    import jieba.analyse
    text='关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作'
    
    keywords=jieba.analyse.extract_tags(text, topK=5, withWeight=False, allowPOS=())
    print(keywords)
    

    在这里插入图片描述

    2. Word2Vec 向量表示

    2.1 定义

    Word2Vec:把每一个单词表示成一个向量,向量在空间中越近则词的含义越近。这些模型一般是基于某种文本中与单词共现相关的统计量来构造。一旦向量表示算出,就可以像使用TF-IDF向量一样使用这些模型。一个比较通用的例子是使用单词的向量表示基于单词的含义计算两个单词的相似度。

    2.2 词向量

    下图为man、boy、water三个单词用50维向量的热度图表示,可以看到,man和boy有一些相似的地方,在向量空间中相隔比较近。而water与之没有相似之处。简单地说,这个模型可以根据上下文的语境来推断出每个词的词向量,如果两个词在上下文的语境中可以被互相替换,那么这两个词的距离就非常近。

    在这里插入图片描述

    2.3 Word2Vec的实现
    from gensim.models.word2vec import Word2Vec
    w2v = Word2Vec(x_train,min_count=5,size=n_dim)
    w2v.build_vocab(x_train)
    w2v.train(x_train_examples=w2v.corpus_count,epochs=10)
    

    三、各种机器学习分类模型

    分别使用了SGD、SVM、NB、ANN、LR等九种模型进行分类,并比较各种模型的测试结果。

    1. TF-IDF & SGD

    1.1 代码演示
    from typing import List
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.linear_model import SGDClassifier
    from sklearn.svm import SVC
    import pickle
    import jieba
    import os
    import re
    import string
    
    file_path1 = '../dataset/train/neg.txt'
    file_path2 = '../dataset/train/pos.txt'
    
    
    # 训练分词
    def train_fenci():
        list_words = []
    
        test_text = open(file_path1, 'r', encoding='utf-8').readlines()
        for line in test_text:
            # 清洗数据
            text = ''.join(line.split())
            # 实现目标文本中对正则表达式中的模式字符串进行替换
            text = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()~-]+", "", text)
            # 利用jieba包自动对处理后的文本进行分词
            test_list = jieba.cut(text, cut_all=False)
            # 得到所有分解后的词
            list_words.append(' '.join(test_list))
    
        test_text = open(file_path2, 'r', encoding='utf-8').readlines()
        for line in test_text:
            # 清洗数据
            text = ''.join(line.split())
            # 实现目标文本中对正则表达式中的模式字符串进行替换
            text = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()~-]+", "", text)
            # 利用jieba包自动对处理后的文本进行分词
            test_list = jieba.cut(text, cut_all=False)
            # 得到所有分解后的词
            list_words.append(' '.join(test_list))
        return list_words
    
    
    # 测试分词
    def test_fenci():
        FindPath1 = '../dataset/test/pos.txt_utf8'
        neg_words = []
    
        lines = open(FindPath1, 'r', encoding='utf-8').readlines()
        for line in lines:
            temp = ''.join(line.split())
            # 实现目标文本中对正则表达式中的模式字符串进行替换
            temp = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()~-]+", "", temp)
            # 利用jieba包自动对处理后的文本进行分词
            temp_list = jieba.cut(temp, cut_all=False)
            # 得到所有分解后的词
            neg_words.append(' '.join(temp_list))
        return neg_words
    
    
    if __name__ == '__main__':
        tfidf_vect = TfidfVectorizer(analyzer='word', stop_words=['我', '你', '是', '的', '在', '这里'])
        train_tfidf = tfidf_vect.fit_transform(train_fenci())
        test_tfidf = tfidf_vect.transform(test_fenci())
        # words = tfidf_vect.get_feature_names()
        # print(words)
        # print(train_tfidf)
        # print(len(words))
        # print(train_tfidf)
        # print(tfidf_vect.vocabulary_)
    
        lr = SGDClassifier(loss='log', penalty='l1')
        lr.fit(train_tfidf, ['neg'] * len(open(file_path1, 'r', encoding='utf-8').readlines()) +
               ['pos'] * len(open(file_path2, 'r', encoding='utf-8').readlines()))
        y_pred = lr.predict(test_tfidf)
        print(y_pred)
        # 统计结果和准确率
        sum_counter = 0
        pos_counter = 0
        neg_counter = 0
        for i in y_pred:
            sum_counter += 1
            if i == 'pos':
                pos_counter += 1
            else:
                neg_counter += 1
        print("总测试语句数:", sum_counter)
        print("积极语句数:", pos_counter)
        print("消极语句数:", neg_counter)
    
        # model = SVC(kernel='rbf',verbose=True)
        # model.fit(train_tfidf,['neg']*3000+['pos']*3000)
        # model.predict(test_tfidf)
    
    
    1.2 预测结果分析

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:在这里插入图片描述

    2. TF-IDF && SVM

    2.1 代码演示

    使用SVM模型:

    from sklearn.svm import SVC
    lr = SVC(kernel='rbf', verbose=True)
    
    2.2 预测结果分析

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    3. TF-IDF & NB

    3.1 代码演示

    使用朴素贝叶斯模型:

    from sklearn.naive_bayes import MultinomialNB
    lr = MultinomialNB()
    
    3.2 预测结果分析

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:
    在这里插入图片描述

    4. TF-IDF & ANN

    4.1 代码演示

    使用人工神经网络模型:

    from sklearn.neural_network import MLPClassifier
    lr = MLPClassifier(hidden_layer_sizes=1, activation='logistic', solver='lbfgs', random_state=0)
    
    4.2 预测结果分析

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    5. TF-IDF & LR

    5.1 代码演示

    使用逻辑回归模型:

    from sklearn.linear_model import LogisticRegression
    lr = LogisticRegression(C=1, penalty='l2')
    
    5.2 预测结果分析

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    6. Word2Vec & SVM

    6.1 代码演示
    import jieba # 结巴分词
    import numpy as np # numpy处理向量
    import pandas as pd 
    
    neg = pd.read_excel('data/neg.xls',head = None) # 读取负面词典
    pos = pd.read_excel('data/pos.xls',head = None) # 读取正面词典
    
    neg['words'] = neg[0].apply(lambda x: jieba.lcut(x)) # 负面词典分词
    pos['words'] = pos[0].apply(lambda x: jieba.lcut(x)) # 正面词典分词
    
    x = np.concatenate((pos['words'],neg['words'])) # 将原句子丢弃掉,并合并正面和负面分词结果
    y = np.concatenate((np.ones(len(pos)),np.zeros(len(neg)))) # 向量空间,1表示positive,0表示negative
    
    from gensim.models.word2vec import Word2Vec # 使用Word2Vec包
    w2v = Word2Vec(size=300, min_count=10) # 初始化高维向量空间,300个维度,一个词出现的次数小于10则丢弃
    w2v.build_vocab(x) # build高维向量空间
    
    w2v.train(x,total_examples=w2v.corpus_count,epochs=w2v.iter) # 训练,获取到每个词的向量
    w2v.save(u'w2v_model.model') # 保存训练好的模型
    
    def total_vec(words): # 获取整个句子的向量
      w2v = Word2Vec.load('w2v_model.model')
      vec = np.zeros(300).reshape((1,300))
      for word in words:
        try:
          vec += w2v.wv[word].reshape((1,300))
        except KeyError:
          continue
      return vec
    
    train_vec = np.concatenate([total_vec(words) for words in x]) # 计算每一句的向量,得到用于训练的数据集,用来训练高维向量模型
    
    from sklearn.externals import joblib
    from sklearn.model_selection import cross_val_score
    from sklearn.svm import SVC
    
    model = SVC(kernel='rbf',verbose=True)
    model.fit(train_vec,y) # 训练SVM模型
    joblib.dump(model,'svm_model.pkl') # 保存训练好的模型
    
    # 对测试数据进行情感判断
    def svm_predict():
      df = pd.read_csv("comments.csv") # 读取测试数据
      
      model = joblib.load('svm_model.pkl') # 读取支持向量机模型
      comment_setiment = []
      sum = 0;
      pos_counter = 0;
      neg_counter = 0;
      for string in df['评论内容']:
        sum += 1;
        # 对评论分词
        words = jieba.lcut(str(string))
        words_vec = total_vec(words)
        result = model.predict(word_vec)
        comment_sentiment.append('积极' if int(result[0]) else '消极')
        
        if sum_counter < 1500:
            if int(result[0]) == 1:
                right += 1
            else:
                wrong += 1
        else:
            if int(result[0]) == 0:
                right += 1
            else:
                wrong += 1
        sum_counter += 1
        
        result = right / sum_counter
        print("判断正确:", right)
        print("判断错误:", wrong)
        print("准确率:", result)
    
    svm_pridict()
    
    6.2 预测准确率

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    7. Word2Vec & SGD

    7.1 代码演示
    from sklearn.linear_model import SGDClassifier
    model = SGDClassifier(loss='log', penalty='l1')
    
    7.2 预测准确率

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    8. Word2Vec & NB

    8.1 代码演示
    from sklearn.naive_bayes import BernoulliNB
    model = BernoulliNB()
    
    8.2 预测准确率

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    . Word2Vec & ANN

    9.1 代码演示
    from sklearn.neural_network import MLPClassifier
    model = MLPClassifier(hidden_layer_sizes=1, activation='logistic', solver='lbfgs', random_state=0)
    
    9.2 预测准确率

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    10. Word2Vec & LR

    10.1 代码演示
    from sklearn.linear_model import LogisticRegression
    model = LogisticRegression(C=1, penalty='l2')
    
    10.2 预测准确率

    在3000条测试语句(1500条积极,1500条消极)中,测试结果如下:

    在这里插入图片描述

    四、各种机器学习模型评估结果

    4.1 某购物网站评论语料

    采用20000条(10000条积极,10000条消极)来自某购物网站的评论语句作为训练集,3000条作为测试集,各种模型的测试结果如下:

    模型测试(条)判断正确(条)精准率(precision)召回率(recall)F1-score
    TF-IDF & SGD300024900.78530.86240.8221
    TF-IDF & SVM300027620.87600.96190.9170
    TF-IDF & NB300026440.82200.93270.8738
    TF-IDF & ANN300027140.88330.92270.9026
    TF-IDF & LR300026580.84400.92140.8810
    TF-IDF & DT300025580.80730.88780.8457
    TF-IDF & RF300026300.82330.92160.8697
    TF-IDF & AdaBoost300022760.67470.81090.7365
    TF-IDF & GBM300023240.64470.87120.7410
    Word2Vec & SGD300022790.89330.70490.7880
    Word2Vec & SVM300026110.82330.90880.8639
    Word2Vec & NB300020940.70400.69570.6998
    Word2Vec & ANN300024390.81460.81200.8133
    Word2Vec & LR300024980.79000.86370.8252
    Word2Vec & DT300025860.80800.90580.8541
    Word2Vec & RF300026080.81530.91410.8619
    Word2Vec & AdaBoost300026000.81070.91290.8588
    Word2Vec & GBM300026090.81670.91350.8624

    五、使用情感词典优化

    在机器学习的模块中加入情感词典,对测试样本进行情感词典的判断,得出 样本中每个数据的情感倾向。在机器学习的模型对测试样本进行判断之中加入情 感词典的判断结果,从而辅助机器学习对样本的判断,可以有效提高判断的准确率。

    模型测试(条)判断正确(条)精准率(precision)召回率(recall)F1-score
    TF-IDF & SGD300027910.96470.90270.9326
    TF-IDF & SVM300029270.98000.97160.9758
    TF-IDF & NB300028860.97400.95120.9625
    TF-IDF & ANN300028990.98600.94870.9670
    TF-IDF & LR300028690.97330.94130.9570
    Word2Vec & SGD300027200.98730.85020.9136
    Word2Vec & SVM300028890.98270.94550.9637
    Word2Vec & NB300026870.97800.83970.9036
    Word2Vec & ANN300028160.98400.90220.9413
    Word2Vec & LR300028390.97870.91920.9480

    参考:https://www.bilibili.com/video/BV16t411d7ZY

    展开全文
  • 温馨提示:本文是《数据分析中,文本分析远比数值型分析重要!》的上篇,聊的是文本分析的一些基本知识,下篇将以一个实际案例来聊聊基于大数据的文本分析是如何应用在商业场景中的,将于明天推送,...
  • 本文将详细讲解文本挖掘领域的词云热点分析和LDA主题分布分析。两万字基础文章,希望对您有所帮助。欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个...
  • 全球多达80%的大数据是非...文本分析技术的发展方向: 1.智能化理解:确定一段文字是关于什么信息的,然后进行匪类和量化,再进一步分析。这有助于发掘客户的特点,并将其转换成结构化的数字输出到预测模型。 2...
  • 本文是刊载于《经济学(季刊)》2019年第4期《文本大数据分析在经济学和金融学中的应用:一个文献综述》和《经济学动态》2020年第4期《金融学文本大数据挖掘方法与研究进展》的阅读笔记 在金融学领域的传统实证研究...
  • 文本情感分析综述

    万次阅读 多人点赞 2018-02-28 18:29:45
    摘要:文本情感分析:又称意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。互联网(如博客和论坛以及社会服务网络如大众点评)上产生了大量的用户参与的、对于诸如...
  • Python文本分析 jieba

    千次阅读 2021-05-07 17:00:29
    Python文本分析 jieba.analyse.extract_tags()提取句子级的关键字 提取关键字 分词介绍 统计中文词频 jieba.analyse.extract_tags()提取句子级的关键字 提取关键字 jieba.analyse.extract_tags()提取句子级的关键字 ...
  • 1. title:基于文本加权词共现的跨语言文本相似度分析 张晓宇 中国传媒大学 软件导刊 跨语言文本相似度计算三种方法: (1)基于全文机器翻译方法:把源语言和目标语言映射到中间语言 (2)基于统计翻译模型方法:...
  • rbow rbow允许您分析文本,以查看相关术语,它们的上下文以及彼此之间的关联。 它可以在多个文本和词典的上下文分析中提高词频。 rbow当前具有三种主要分析类型的实现: 演绎法:允许您分析两组术语(现象和描述符)...
  • 文本分析软件-智分析 SmartAnalyze

    千次阅读 2021-04-06 17:10:40
    目前,国内市面上几乎没有完整,且具有系统文本分析软件。 因此,要想运用自然语言处理技术进行文本数据分析,几乎都得涉及编程,有的做个词云图,都得耗费大量的精力查阅相关的资料,对于非技术人员来说,是一...
  • 文本分析基础知识

    2019-03-25 21:46:36
    当下的一些网络文本分析的难点: 1)数据是实时动态变化的,比如一些博客、评论、聊天信息等刷新速度特别快,并且数量庞大 2)存在这一些短文本文本数量较少,包含的有效信息也比较小,但是特征集的维数很高,这就...
  • 文本情绪分析学习篇(一)

    千次阅读 2021-03-23 17:50:58
    文本情绪分析学习篇(一) 1. 最新研究算法 BERT(Bidirectional Encoder Representations from Transformers)近期提出之后,作为一个Word2Vec的替代者,其在NLP领域的11个方向大幅刷新了精度,目前网络最优突破...
  • 摘要:本篇文章主要介绍了情感分析的一些基本任务,包括文本、语音、图像还有生成、识别,着重讲述华为云在细粒度情感分析方面两个工作。 导读:先简单介绍一下文本情感分析的一些基本概念,然后介绍一下华为云在...
  • sklearn文本聚类分析

    千次阅读 2020-05-10 19:04:15
    表中的文本数据有两列,表达的意思相同,一个是留言主题总结了文本的意思,另一个是留言详情详细叙述了文本: 这里选择留言主题,有两个原因,一、主题是总结的内容,比较精炼,大部分字都是与想表达的意思相关的,...
  • 大数据分析笔记 - 文本分析总览文本分析步骤挑战第一步:收集原始文本数据(Collecting Raw Text)第二步:表示文本 (Representing Text)第三步:词频-逆文档频率(TFIDF - Term Frequency - Inverse Document ...
  • word2vec是Google的一个开源工具,通过将词转化成向量的形式,可以把对文本內容的处理简化为向量空间中的向量运算,往往会结合余弦相似度来计算向量空间上的相似度,來表示文本语意上的相似度。例如:word2vec训练词...
  • 在语义倾向性分析中,若忽略关联词和修饰词则有可能导致对极性词的倾向或强度判断失误。针对这一问题,提出了一种新的语义倾向性识别算法,用于对潜在极性词进行倾向性识别,并应用到文本过滤方面。实验表明此方法...
  • 数据分析学习总结笔记09:文本分析

    千次阅读 多人点赞 2020-04-04 09:39:38
    数据分析学习总结笔记09:文本分析1 文本分析1.1 文本分析概述1.2 结构/非结构化数据1.3 文本数据特点1.4 自然语言处理——NLP1.5 文本挖掘的应用2 文本分词2.1 英文分词——KNIME2.2 中文分词2.2.1 中文分词工具...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 305,531
精华内容 122,212
关键字:

文本关联性分析