您的位置:首页 > 编程语言 > Python开发

python中文语音识别后-结巴分词以及停用词过滤时遇到的转码问题

2016-06-01 16:39 676 查看
首先自己建立了一个停用词表,表中有各种符号,没有查询意义的中文词,以及英文词,在语音识别系统运行过程中,始终都维护着一个停用词表,但是在对结巴分词后的词进行过滤的时候出现了编码不一致的情况导致无意义词不能得到有效过滤。后来参考该链接:http://san-yun.iteye.com/blog/1544123,以及使用python的chardet库的detect方法检测字符的字符集属性,然后使用对应的codecs模块的相关方法1、将停用词文本中的字符转化为utf-8类型,2、将结巴分词的结果(本是unicode类型)也转化为utf-8类型,最终的目的即是将两者的字符集保持一致,这样才会达到过滤的效果。

代码如下:可通过修改注释部分结合相关链接,从而了解代码逻辑。最后如期过滤掉了“逗号,于”等字符

# -*- coding: utf-8 -*-
import jieba
import sys,time
import urllib2
import nltk
import os
import codecs
import chardet
recognitionResult = "小明硕士毕业于中国科学院计算所,后在日本京都大学深造"
look = codecs.lookup("gbk")
look2 = codecs.lookup("utf-8")
# print "jsu",chardet.detect(recognitionResult)
def getStopWords(): # 返回停用词list
global look
buff = []
with codecs.open('stop.txt') as fp:
for ln in fp:
el = ln[:-2]
# print "el1",type(el),el,[el],chardet.detect(el)
buff.append(el)
# break

# el = look.decode(el)
# el = look.encode(el[0])
# print "el2",type(el),el[0],el,chardet.detect(el[0])
# buff.append(ln[:-2])
print 'buff',buff

return buff

stopWords = getStopWords()

def getKeyWords(recognitionResult):
global look2
if len(recognitionResult)<3: # 识别结果无效
return
segList = jieba.cut_for_search(recognitionResult)  # 搜索引擎模式进行切割
# print "原来", ",".join(segList)# generator类型,只能用一次

keyWords = []
for el in segList: # 过滤掉无意义的词
# el = look.decode(el)
# print 'el11', type(el), el, chardet.detect(el) # el11 <type 'unicode'> 小明
el = look2.encode(el)[0]
# print 'el22',type(el),el,[el],chardet.detect(el)
# keyWords.append(el)
if el not in stopWords and len(el)>1: #关键词的长度默认大于1
# print 'el33', type(el), el, [el], chardet.detect(el)
keyWords.append(el)
print 'keyWords',keyWords
return keyWords

# getKeyWords(recognitionResult)

for ell in getKeyWords(recognitionResult):
print look2.decode(ell)[0]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息