前言
- 年初公司开展了一个智能聊天机器人的项目(Sima),前期在项目里面负责NLP调研和爬虫的工作,出于学习兴趣和工作需要,便报了个NLP的学习课程,老师是百度凤巢的,对其水平很是敬佩,人也很nice。虽说对NLP的兴趣不是max,但是学习过程中能把算法知识复习一遍也是极好的。
- 像BAT等这样的互联网公司里,核心数据仍是文本数据,基于文本可以做大量的工作,来为公司的核心业务目标服务。例如搜索业务,需要对用的搜索query做大量的分析,分析用户的搜索意图,这看似简单的过程,其中衍生了非常多的技术。
- 本文集---NLP自然语言处理,记录学习过程中收获的知识点和感悟。
环境配置
- Linux环境(本人用的deepin,强制办公系统为Linux,更能练习Linux操作)
- python 2.7 (这个不强求)
1.正则表达式
- 正则没有捷径,唯有多加练习。
- 正则表达式在线验证工具:http://regexr.com/
- 正则表达式进阶联系:http://alf.nu/RegexGolf
- 正则表达式速查表:http://www.jb51.net/tools/regexsc.htm
- 正则没有捷径,唯有多加练习。
2.NLP中常用linux shell命令
- awk
- sort 排序用
- uniq 用于报告或忽略文件中的重复行,一般与sort结合使用。
- sed 编辑文件,简化对文件的反复操作等。
学习Linux命令,推荐鸟哥。
3.中文分词:jieba包的使用
-
jieba大概是Python里面最好用的分词系统了,代码量少,速度不错。基于HMM模型实现,可以实现一定程度的未登录词识别。
-
jieba有三种模式:
-- 精确模式
-- 全模式:找到所有可能的词语
-- 搜索模式:在精确模式的基础上对长词进行切割,提高召回率。 -
jieba.cut和jieba.cut_for_serach返回的结构都是可迭代的generator,可以是用for循环来获得分词后得到的每一个词语(Unicode)
-
jieba.cut方法接受三个输入参数:
-- 需要分词的字符串
-- cut_all 参数控制是否采用全模式
-- HMM参数控制是否采用HMM模型 -
下面用一个垃圾短信分类分词(选取top100的词频)来简单介绍jieba的使用
#encoding:utf8
#Created on 2017-12-06 by wzt
#引入需要的包
import jieba
import codecs #自然语言编码转换模块
import csv
from collections import Counter
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#数据目录
data_path = '/home/wang/Desktop/bat/data20171204/normal.txt'
result_path = '/home/wang/Desktop/bat/data20171204/result.csv'
#切出来是一个大list
with codecs.open(data_path,'r','utf-8') as f:
seg_list = jieba.cut(f.read(),cut_all=False)
words_list = list(seg_list)
#使用Counter方法选取词频top100
count = Counter(words_list)
most100 = count.most_common(100)
print most100
#写入result.csv
for x in xrange(len(most100)):
print '词语:[',most100[x][0],']==>','频次:',most100[x][1]
with codecs.open(result_path, 'a','utf-8') as csvfile:
writer = csv.writer(csvfile)
rows = most100[x][0],most100[x][1]
writer.writerow(rows)
结尾
如果有写的不好的地方或者错误的地方,请各位看官斧正!
谢谢大家!










网友评论