【自然语言处理】分词词性标注命名实体识别02

2.1分词

2.1.1基本介绍

中文分词是指就将一个汉字序列切分成一个一个单词.分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.

应用

  • 是其他中文信息处理的基础.搜索引擎,机器翻译,语音合成,自动分类,自动摘要,自动校对等.

2.1.2准确分词

使用jieba进行分词

方法一:加载字典

有些词是我们的词库中没有的,这是后我们可以将这些词库中没有的词存放到字典中

import jieba
jieba.load_userdict('./data/dict1.txt')
string="阿莫A西林裸婚霉素安乃庆摩托罗拉三星华为航天器材柏芝"
results=jieba.cut(string)
for res in results:
    print(res)

方法二:正则匹配

有的时候中文和英文的混在一块,我们加载字典也无法分准确,这是后我们就可以使用这种方法.

import jieba
import re
fp=open('./data/test.txt','r',encoding='utf-8')  # 文本文件
fout=open('./data/result.txt','w',encoding='utf-8')  # 存放分词后数据的文件
regex1=r'(?:[0-9]{1,3}[.]?[0-9]{1,3})%'  # 匹配的正则
p1=re.compile(regex1)  # 正则对象
for line in fp.readlines():  # 变量文件每一行
    result1=p1.findall(line)  # 找到所有匹配到的字符串,存放在列表中
    if result1:  # 判断列表是否为空
        line=p1.sub('FLAG',line)  # 将匹配到的内容替换掉
    print(line)
    words=jieba.cut(line)  # 对替换后的文本进行分词
    for word in words:  # 遍历文本
        if word=="FLAG":
            val=result1.pop(0)
            fout.write(val+"\n")  # 将文本写入到文件:writelines参数是迭代器,write参数是字符串
            print(val)
        else:
            fout.write(word+"\n")
            print(word)
fp.close()
fout.close()   

方法三:调整字典的频率分词

import jieba
import re
jieba.load_userdict('./data/dict1.txt')

# 为了保证台中这个词不被切开,我们开启这句话
fp=open('./data/dict1.txt','r',encoding='utf-8')
for line in fp:
    line=line.strip()  # 祛除换行符
    jieba.suggest_freq(line,tune=True)

string='台中正确应该不会被切开'
words=jieba.cut(string,HMM=False)
result=" ".join(words)
print(result)

方法四:按照词频切词

举个例子,我们现在有一句话"我喜欢数据库设计这门课.",这时候我希望将"数据库设计"这个词切到一块,而不是切成"数据库"和"设计",这时候我们可以通过更改词频实现,词频越高越容易被匹配.下面进行手动实现:

读取词库文件,将词库中的词根据词频进行排序,优先选择匹配高的词语进行切分

使用hanlp进行分词

在进行分词的使用我们将字典写成这种格式,词名,词性和词频

还需要在hanlp的目录文件hanlp.properties文件中指定字典的路径

2.2词性标注

2.2.1基本介绍

将词分开并标注词性,不同的工具,词性标注不一定一样.,百分之八十的准确率是不能用的.

2.3命名实体识别(NER)

专有名词的识别,主要包括人名,地名,机构名,地名,时间日期,货币和百分比等.不同的项目中命名实体类别具有不同的定义.

发布了133 篇原创文章 · 获赞 67 · 访问量 9924

猜你喜欢

转载自blog.csdn.net/weixin_43797885/article/details/104508924
今日推荐