上海涛德顾问学院

人工智能NLP培训系列:NLP中的中文单词特征处理

摘要: 人工智能培训系列:NLP中的中文单词特征处理。作者:上海涛德人工智能培训在NLP的情感分析,或者相关分类分析中,有不少文章引用了一系列不错的论文。不过对于中文名义特征的处理相对比较少。对于中文处理,可以看成 ...
人工智能培训系列:NLP中的中文单词特征处理。

作者:上海涛德人工智能培训

在NLP的情感分析,或者相关分类分析中,有不少文章引用了一系列不错的论文。不过对于中文名义特征的处理相对比较少。
对于中文处理,可以看成有两方面内容,一个是中文分词,另外一个中文特征处理。

第一个中文分词:

中文分词与英文单词用空格不太一样。还设计到多个字组成的词语。这时就涉及到中文分词。其中Jieba是一个非常优秀的中文分词工具。

以Python为例子(R语言等其他语言也有jieba等包)。

import jieba
cn_string='涛德顾问学院即将在2018年底推出keras培训欢迎参加。'
jieba_list=jieba.cut(cn_string)
tokenslist=[]
for seg in jieba_list:
    tokenslist.append(seg)
print (tokenslist)

输出如下:

['涛', '德', '顾问', '学院', '即将', '在', '2018', '年底', '推出', 'keras', '培训', '欢迎', '参加', '。']

可以看到效果还是不错,而且还自动把英文转换成了小写。当然结果还不是很完美,还可能需要对数字处理。标点符号处理。不过借助于R,或者Python等工具,已经不是难事了。毕竟最重要的分词问题可以解决了。

当然如果你希望看到“涛德顾问学院”作为一个整体名称存在,就需要自定义字典了(jieba支持这个功能)。

此外,这个软件还支持, 更多分词模式等其他功能,具体的信息可以访问github上的文档

GitHub地址为: https://github.com/fxsjy/jieba


第二个问题是,把分词的结果转换成特征列。以方便各种机器学习算法训练。
我们以R语言为例子,结合tm等包(python也有相关的包)来说明:

library(tm)

library(SnowballC)

#定义2个文档(2行)测试数据,定义成数据框

a=data.frame(rbind(c('人人 爱 北京 他 不 爱 上海') , c('我 爱 上海')) ,stringsAsFactors=F)
a
names(a)='text'

#转换为文集(语料库)对象
b=VCorpus(VectorSource(a$text))

#自定义空格切分单词

strsplit_space_tokenizer <- function(x)
    unlist(strsplit(as.character(x), "[[:space:]]+"))

#转换为稀疏矩阵

c=DocumentTermMatrix(b,control=list(tokenize = strsplit_space_tokenizer,stopwords = T ,  wordLengths=c(0,Inf), removeNumbers=F,removePunctuation=F))
as.matrix(c)

#如果当前行特征存在就记录为YES,否则为NO
convert_counts <- function(x) {
  x <- ifelse(x > 0, "Yes", "No")
}

d=apply(c, MARGIN = 2, convert_counts)

d

转换完成,d数据框可以看成是方便进行朴素贝叶斯算法。或者深度神经网络等分类算法已经处理好的特征。

效果如下:

> as.matrix(c)

Terms

Docs 爱 北京 不 人人 上海 他 我

1 2 1 1 1 1 1 0

2 1 0 0 0 1 0 1


> d

Terms

Docs 爱 北京 不 人人 上海 他 我

1 "Yes" "Yes" "Yes" "Yes" "Yes" "Yes" "No"

2 "Yes" "No" "No" "No" "Yes" "No" "Yes"



相关阅读

联系

上海涛德顾问学院 ( 沪ICP备14006824号 )  

GMT+8, 2018-12-11 11:47 , Processed in 0.129250 second(s), 15 queries , Gzip On.

Top Data World

回顶部