一、基本文本处理技能

  1. 分词的概念
    中文和英文不同,英文中句子天然已经分割为单词,但是中文中字与字之间紧紧连在一起,需要进行分词,分词算法有:基于字符串匹配算法、基于理解的算法、基于统计的算法
  • 分词的正向最大匹配
    分词的正向最大匹配是基于分治和贪婪两种算法思想,若不设立最大的处理长度,就是贪婪的思想,具体是先以整句为单位,就去词典匹配,若匹配不到,就减少句子长度进行匹配,若匹配到,句子起点后移,继续递归执行,知道整个句子被若干个词匹配到;
    只基于贪婪方式,实际工作中无法使用,句子一长就需要迭代的次数就非常多,所以需要结合分治的思想进行处理
  • 分词的反向最大匹配
    反向最大匹配是从后往前选取最大长度的串,从选取串开始往后匹配,而删减的也是左边的字符
  • 分词双向最大匹配
    双向就是结合正向最大和反向最大的结果,对两个结果进行比较,从而决定正确的分词方式,当前向和逆向分词数量不同时,选择数量较少的那个分词结果,分词数量相同,依次比较分词结果,相同位置如果分词相同,则选取最后的结果,若相应位置分词结果不一样则选取字符较小的那个为分词结果
  1. 词、字符频率统计
    可以使用Python中的collection.Counter模块

二、语言模型

  1. unigram、bigram和trigram的概念
    n-gram是一种基于统计语言模型的算法,它的思想是将文本里面的内容按照指定的单元进行大小为N的滑动窗口操作,每次取得长度为N的序列,直到滑窗结束
  • unigram是指单个词为一个单元,每个词之间没关联关系
  • bigram是指两个词为一个单元
  • trugram是指三个词为一个单元
  1. unigram和bigram频率统计
    unigram等同于词频统计,bigram频率统计只需要取n-gram,然后传入到Counter()中即可

三、文本矩阵化

  1. 分词
    分词工具采用结巴中文分词,涉及到的算法:
  • 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词的情况所构成的有向无环图(DAG)
  • 采用动态规划查找最大概率路径,找到基于词频的最大划分组合
  • 对于未登录词,采用基于汉字成词能力的HMM模型,使用了Viterbi算法

结巴中文分词支持的三种分词模式包括:

  • 精确模式:视图将句子最精确的切开,适合文本分析;
  • 全模式:把句子中所有的可以成词的语句都扫描处理,速度非常快,但不解决歧义;
  • 搜索引擎模式:在精确模式的基础上,对分词再次切分,提高召回率,适合用于搜索引擎分词
  1. 去停用词,构建词表
#去停用词
lists=[]
count =0
for i in x_train_data:
	word_list=[word for word in jieba.cut(i) if word not in stopwords]
	lists.append(word_list)

#取前100条数据加快处理
data = lists[:100]
#统计词表出现次数
Wordlist ={}
for i in data:
	for j in wordList:
		wordList[j] +=1
	else:
	wordList[j] =1
#创建词表
count=0
dic ={}
for i,j in wordList.items():
	if j>2:
		dic[i]=count
		count+=1
# 反向词表
resDic={}
for i,j in dic.items():
	resDic[j]=i
  1. 每篇文档向量化
UNK=0
for i in range(len(data)):
	data [i] =[dic[j] if j in dic
	else UNk for j in data[i]