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