自然语言处理笔记总目录
文本预处理中包含的主要环节
- 文本处理的基本方法
- 文本张量表示方法
- 文本语料的数据分析
- 文本特征处理
- 数据增强方法
文本处理的基本方法
- 分词
- 词性标注
- 命名实体识别
文本张量表示方法
- one-hot编码
- Word2vec
- Word Embedding
文本语料的数据分析
- 标签数量分布
- 句子长度分布
- 词频统计与关键词词云
文本特征处理
- 添加n-gram特征
- 文本长度规范
数据增强方法
- 回译数据增强法
一、jieba
1.多种分词模式
1.1 精确模式
import jieba
content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
jieba.lcut(content, cut_all=False)
结果:
['工信处', '女干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换机', '等', '技术性', '器件', '的', '安装', '工作']
注:用
lcut
而不用cut
是因为cut
返回的是一个迭代器,如果想要读取可以使用for循环加推导式读取到列表当中
1.2 全模式分词
将cut_all
改为True
即可(cut_all默认为False)
jieba.lcut(content, cut_all=True)
1.3 搜索引擎模式
在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
jieba.lcut_for_search(content)
结果:
['工信处', '干事', '女干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换', '换机', '交换机', '等', '技术', '技术性', '器件', '的', '安装', '工作']
2.中文繁体分词
content = "煩惱即是菩提,我暫且不提"
jieba.lcut(content) # cut_all默认为False,即为精确模式
['煩惱', '即', '是', '菩提', ',', '我', '暫且', '不', '提']
3.用户自定义词典
jieba.lcut("八一双鹿更名为八一南昌篮球队")
# ['八', '一双', '鹿', '更名', '为', '八一', '南昌', '篮球队']
本目录下创建一个txt文件
jieba.load_userdict("./userdict.txt")
jieba.lcut("八一双鹿更名为八一南昌篮球队")
# ['八一双鹿', '更名', '为', '八一', '南昌', '篮球队']
二、hanlp
import hanlp
# 中文分词
content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
tokenizer = hanlp.load('CTB6_CONVSEG') # 加载预训练模型
a = tokenizer(content)
print(a)
# 英文分词
# tokenizer = hanlp.utils.rules.tokenize_english
from hanlp.utils.lang.en.english_tokenizer import tokenize_english
tokenizer = tokenize_english
b = tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.')
print(b)
['工信处', '女', '干事', '每', '月', '经过', '下', '属', '科室', '都', '要', '亲口', '交代', '24口', '交换机', '等', '技术性', '器件', '的', '安装', '工作']
['Mr.', 'Hankcs', 'bought', ' hankcs.com ', 'for', '1.5', 'thousand', 'dollars', '.']
三、命名实体识别(NER)
中文:
import hanlp
recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)
recognizer(list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观。'))
# [('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18), ('张晚霞', 'NR', 21, 24), ('美国', 'NS', 26, 28), ('纽约现代艺术博物馆', 'NS', 28, 37)]
英文:
recognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_UNCASED_EN))
recognizer(["President", "Obama", "is", "speaking", "at", "the", "White", "House"])
# [('Obama', 'PER', 1, 2), ('White House', 'LOC', 6, 8)]
四、词性标注(POS)
使用jieba中文标注:
import jieba.posseg as pseg
pseg.lcut("我爱北京天安门")
# [pair('我', 'r'), pair('爱', 'v'), pair('北京', 'ns'), pair('天安门', 'ns')]
使用hanlp中文标注:
import hanlp
tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)
tagger(['我', '的', '希望', '是', '希望', '和平'])
# ['PN', 'DEG', 'NN', 'VC', 'VV', 'NN']
使用hanlp英文标注:
tagger = hanlp.load(hanlp.pretrained.pos.PTB_POS_RNN_FASTTEXT_EN)
tagger(['I', 'banked', '2', 'dollars', 'in', 'a', 'bank', '.'])
# ['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN', '.']