特征提取

特征提取

一.分词

1.正向最大匹配法
分词目标
在词典中进行扫描,尽可能地选择与词典中最长单词匹配的词作为目标分词,然后进行下一次匹配。
算法流程:
a.扫描字典,测试读入的子串是否在字典中
b.如果存在,则从输入中删除掉该子串,重新按照规则取子串,重复a
c.如果不存在于字典中,则从右向左减少子串长度,重复a

2.逆向最大匹配法
分词目标:
在词典中进行扫描,尽可能地选择与词典中最长单词匹配的词作为目标分词,然后进行下一次匹配。在实践中,逆向最大匹配算法性能优于正向最大匹配算法。
算法流程:
a.扫描字典,测试读入的子串是否在字典中
b.如果存在,则从输入中删除掉该子串,重新按照规则取子串,重复a
c.如果不存在于字典中,则从左向右减少子串长度,重复a

3.双向最大匹配法
分词目标:
将正向最大匹配算法和逆向最大匹配算法进行比较,从而确定正确的分词方法。
算法流程:
a.比较正向最大匹配和逆向最大匹配结果
b.如果分词数量结果不同,那么取分词数量较少的那个
c.如果分词数量结果相同。结果相同,可以返回任何一个;结果不同,返回单字数比较少的那个

二. 语言模型

n-gram是一种统计语言模型,用来根据前(n-1)个item来预测第n个item。
unigram 一元分词,把句子分成一个一个的汉字。
bigram 二元分词,把句子从头到尾每两个字组成一个词语。
trigram 三元分词,把句子从头到尾每三个字组成一个词语。

三.文本矩阵化

def cut_word(text):
	return list(jieba.cut(text))
 
def rm_stopword(text_list,stopwords):
  	result = []
   	for word in text_list:
		  if word not in stopwords:
   			result.append(word)
        return result
   
 def build_vocab(word_list,vocab_size):
	 word_count = collections.Counter(word_list).most_common(vocab_size-1)
	 word2index = [w:i for i,w in word_count]
	 index2word = [i:w for i,w in word_count]
	 return word2index,index2word
	 
def vectorize(words,w2i):
 	dict_len = len(w2i)
 	result = []
	 for word in words:
 		 nul = [0]*dict_len
 		 nul[w2i[word]] = 1
 		 result.append(nul)
	 return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值