自然语言处理入门之路【task03】——特征提取
程序员文章站
2024-02-22 11:29:58
...
- 基本文本处理技能
1.1 分词的概念(分词的正向最大、逆向最大、双向最大匹配法);
1.2 词、字符频率统计;(可以使用Python中的collections.Counter模块,也可以自己寻找其他好用的库) - N元模型
2.1 语言模型中unigram、bigram、trigram的概念;
2.2 unigram、bigram频率统计;(可以使用Python中的collections.Counter模块,也可以自己寻找其他好用的库) - 文本矩阵化:要求采用词袋模型且是词级别的矩阵化
步骤有:
3.1 分词(可采用结巴分词来进行分词操作,其他库也可以);
3.2 去停用词;构造词表。
3.3 每篇文档的向量化
1、基本文本处理技能
- 1.1分词
-
正向最大匹配法
从左向右,在词典中搜索,尽可能选择与词典中最长单词匹配的的词作为分词结果。并且可以每次最大字符长度
例句:我来到北京清华大学
词典{“我“, “来到”, “来”, “到”,“北京”, “清华”, “大学”, “华大”, “清华大学”}
取最大字符长度为6
第一轮:
“我来到北京清”
“我来到北京”
“我来到北”
“我来到”
“我来”
“我” √
第二轮:
“来到北京清华”
“来到北京清”
“来到北京”
“来到北”
“来到” √
第三轮:
“北京清华大学”
……
最终结果:我 / 来到 / 北京 / 清华大学 -
逆向最大匹配法
顾名思义,匹配方法与正向方法相同,但是方向为从句尾到句首
例句:我来到北京清华大学
词典{“我“, “来到”, “来”, “到”,“北京”, “清华”, “大学”, “华大”, “清华大学”}
取最大字符长度为6
第一轮:
“北京清华大学”
“京清华大学”
“清华大学” √
第二轮:
“我来到”
“来到” √
第三轮:
……
最庸结果:我 / 来到 / 北京 / 清华大学 -
双向最大匹配法
使用上述两种方法都切一遍,然后根据大颗粒度词越多越好,非词典词和单字词越少越好的原则,对比选优的一种作为结果
-
- 1.2 词、字符频率统计
- 字符频率统计
代码如下
输出结果:from collections import Counter demo = '组队学习说明:学习自然语言处理理论' count = Counter(demo) print(count)
Counter({'学': 2, '习': 2, '理': 2, '组': 1, '队': 1, '说': 1, '明': 1, ':': 1, '自': 1, '然': 1, '语': 1, '言': 1, '处': 1, '论': 1})
- 词频统计
词频的统计,单独使用Collections工具就不够了,需要先用jieba分词进行分词,再使用Collections统计
代码:
输出结果:from collections import Counter import jieba demo = '组队学习说明:学习自然语言处理理论' list1 = list(jieba.cut(demo)) print(list1) count = Counter(list1) print(count)
['组队', '学习', '说明', ':', '学习', '自然语言', '处理', '理论'] Counter({'学习': 2, '组队': 1, '说明': 1, ':': 1, '自然语言': 1, '处理': 1, '理论': 1})
- 字符频率统计
2、N元模型
- 名词释义
unigram 一元模型,将句子分为单个字,当前位置的字仅和前一个字有关系,取决于前一个字的概率
bigram 二元模型,将句子分为双字,当前位置的字仅和前两个字有关系,取决于前两个字出现的概率
trigram 三元模型,将句子分为三字,当前位置的字仅和前三个字有关系,取决于前三个字出现的概率
N-Gram模型,即N……
3、文本矩阵化
上一篇: 简单解析PHP程序的运行流程