未登陆词/停用词建立和使用

refer:https://wenku.baidu.com/view/0029a79a376baf1ffd4fad8d.html

https://wenku.baidu.com/view/0029a79a376baf1ffd4fad8d.html

一. 未登陆词:

   未登录词即没有被收录在分词词表中但必须切分出来的词,包括各类专有名词(人名、地名、企业名等)、缩写词、新增词汇等等(参考百度百科定义)

    下面简单谈下补充思路:

  • 中文输入法对于新词的补充实效性比较强,国内比较知名的输入法,例如搜狗输入法/百度输入法/qq输入法在官网都有相应的词库;例如搜狗输入法(https://pinyin.sogou.com/dict/),在其官网有专门的细胞词库
未登陆词/停用词建立和使用_第1张图片
    我们可以导出这些有领域性的词汇进行补充,但是很遗憾,导出的为scel格式,这里我们需要将scel格式转为txt,下面通过深蓝词库转换工具(https://github.com/studyzy/imewlconverter,很遗憾,目前只适用于windows系统,但是支持的输入法种类非常多),进行转化;
    未登陆词/停用词建立和使用_第2张图片

  • 具体情况具体分析,这块还是需要认为不断的补充,不然就不叫未登陆词了;这里补充的思路可以适当借鉴停用词库的建立;


二.停用词

       停用词是指在信息检索中,为节省存储空间和提高 搜索 效率,在处理 自然语言 数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。但是,并没有一个明确的停用词表能够适用于所有的工具。甚至有一些工具是明确地避免使用停用词来支持短语搜索的 (参考百度百科)

    我的理解:停用词对语义的理解帮助微乎其微,去除停用词,可以简化文本结构,降低存储,降维;
    但是,不少blog上列了一大堆停用词,例如有将“不可抗拒”列为停用词,这.....; 实际上,停用词对于自然语言处理起到非常关键的作用,例如文本分类,见下面一片文章的测试结果:
    未登陆词/停用词建立和使用_第3张图片
       遇到停用词,我们处理的思路大致如下:

未登陆词/停用词建立和使用_第4张图片    这里简单的模拟一个,计算tf-idf,对词的重要性进行评估(剩余的计算方式后续考虑在特征工程中进行说明)
#模拟对xx笔记本的评论场景

import os
from pyltp import  Segmentor
from math import log


def word_cut(sentences):
    abs_path = "/Users/hqh/nlp/3.4.0/ltp_data_v3.4.0"
    cws_path = os.path.join(abs_path, 'cws.model')
    seg = Segmentor()  # 生成实例对象
    seg.load(cws_path)
    words = seg.segment(sentences)
    return words


dict={
    "这台笔记本真漂亮":1,
    "我觉得这台笔记本在性能上很突出":1,
    "这台笔记本各方面都还可以":1,
    "笔记本的散热一般,笔记本的性价比不高":0
}  # 评论语作为key,value代表对笔记本的情感,褒义为1,贬义为0
#tf / idf 函数


''' tf-idf计算  '''
word_all={}
word_document={}
for key in dict.keys():
    words=list(word_cut(key))
    words_set=set(words)
    for tmp in words:
        if tmp not in word_all.keys(): #如果不在,咋们初始化
            word_all[tmp]=1
        else:
            word_all[tmp]+=1    #如果在了,那么计数器累加1
    for tmp in words_set:
        if tmp not in word_document.keys():
            word_document[tmp]=1
        else:
            word_document[tmp]+=1


total=sum(word_all.values())
length=len(dict.values())
for k,v in word_all.items():
   tf=word_all[k]/total
   idf=log(length/word_document[k])
   tf_idf=tf*idf
   print(k+'---->'+str(tf)+'----->'+str(idf)+'---->'+str(tf_idf))
结果:

这---->0.09090909090909091----->0.28768207245178085---->0.026152915677434625
台---->0.09090909090909091----->0.28768207245178085---->0.026152915677434625
笔记本---->0.15151515151515152----->0.0---->0.0
真---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
漂亮---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
我---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
觉得---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
在---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
性能---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
上---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
很---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
突出---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
各---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
方面---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
都---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
还---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
可以---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
的---->0.06060606060606061----->1.3862943611198906---->0.08401784006787216
散热---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
一般---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
,---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
性价比---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
不---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608
高---->0.030303030303030304----->1.3862943611198906---->0.04200892003393608




你可能感兴趣的:(自然语言处理)