discover new short terms and phrases

中文新词发现

在做中文文本分析过程中,经常遇到的一个问题是如何识别特定语境下的新词或短语,尤其是对于商业类文本的分析,如果不能有效发现并识别行业应用场景下的专有词语/短语,后续的分析结果与质量将大打折扣。

市面上进行中文新词发现的算法有多种,但符合实用、简单、高效原则的算法并不多见,互信息和左右熵相结合的算法应该算其中的代表。关于这几种算法的介绍可以看 https://www.jianshu.com/p/e9313fd692ef ,最近有北邮的学生在python3下开源实现了算法,可以输出TOP-N个新词或短语。见 https://github.com/zhanzecheng/Chinese_segment_augment ,同时采用了Trie树(字典树)的数据结构来计算,详见 https://github.com/zhanzecheng/The-Art-Of-Programming-By-July/blob/master/ebook/zh/06.09.md,在此留存备案待后续使用。

MAC系统上安装tinytex权限不足,拒绝安装的问题,可以参考链接 https://apple.stackexchange.com/questions/208944/upgrading-brew-in-el-capitan 介绍的方法予以解决

2019年1月2日补充:解决上述问题建议参看:https://github.com/yihui/tinytex/issues/24 帖子中,yihui commented on 11 Mar 2018 • 的回复,在MAC机的terminal中输入以下两行命令:

sudo chown -R `whoami`:admin /usr/local/bin
~/Library/TinyTeX/bin/x86_64-darwin/tlmgr path add

然后在 Rstudio 中继续安装 TinyTeX 即可,安装成功后,MAC上 build book 时常常会出现缺某些字体的报错,解决的办法可以参看 https://blog.csdn.net/penghouwen/article/details/50491177 ,然后去这个网址 https://fontzone.net/font-details/simsun 下载所缺的字体。

用python开发的新词发现小程序放在 d:下,主程序 run.py,可以利用该程序识别特定语境下的专业术语/短语,使用步骤如下:

步骤1:将R语言环境下要分析的语料输出为采用 UTF-8 编码格式的 TXT 文件,示例代码

# 设置工作目录,加载指定目录下的数据文件
setwd("D:\\教学文件\\学生文件\\普硕论文指导\\2016级硕士论文\\杨佳萍-数据预处理后")
ZLZP <- readxl::read_excel("datafile.xlsx")

# 拆分数据文件为AI和bigdata两部分
ZLZP_bigdata<-dplyr::filter(ZLZP, jobtype =="bigdata")
ZLZP_AI<- dplyr::filter(ZLZP, jobtype =="AI") 

# 对AI数据集中的职位描述字段进行预处理
ZLZP_AI$jobdescription<-sapply(ZLZP_AI$jobdescription, FUN = function(x){
  temp <- trimws(x) # 去除空白
  #temp <- gsub(pattern = "\\s|\\r|\\n|\\r\\n|\\t", replacement = "", temp)
  temp <- gsub(pattern = "\\W", replacement = "", temp)
  #temp <- gsub(pattern = "^[\u4e00-\u9fa5+a-zA-Z0-9]+$", replacement = "", temp)
  temp <- temp[which(nchar(temp)>1)] # 去除单个/空字符
  #paste(temp,collapse = " ")
})

# 对bigdata数据集中的职位描述字段进行预处理
ZLZP_bigdata$jobdescription<-sapply(ZLZP_bigdata$jobdescription, FUN = function(x){
  temp <- trimws(x) # 去除空白
  #temp <- gsub(pattern = "\\s|\\r|\\n|\\r\\n|\\t", replacement = "", temp)
  temp <- gsub(pattern = "\\W", replacement = "", temp)
  #temp <- gsub(pattern = "^[\u4e00-\u9fa5+a-zA-Z0-9]+$", replacement = "", temp)
  temp <- temp[which(nchar(temp)>1)] # 去除单个/空字符
  #paste(temp,collapse = " ")
})

# 将预处理后的AI数据集-职位描述字段导出为UTF-8编码的TXT文件
write.csv(ZLZP_AI$jobdescription,"d:\\AI-job.txt",col.names = FALSE, row.names = FALSE, quote = FALSE, fileEncoding = "UTF-8")
write.csv(ZLZP_bigdata$jobdescription,"d:\\bigdata-job.txt", col.names = FALSE, row.names = FALSE, quote = FALSE, fileEncoding = "UTF-8")

步骤2:将输出的采用 UTF-8 编码格式的 TXT 文件放在程序 目录下,修改 run.py 文件中两处代码,一处是加载文件的名称,一处是输出文件的名称。

步骤3:在 1anaconda1 环境下运行 run.py 代码,输出结果为 txt 文件,以建立的专业术语/短语评判标准1为准则,人为判断输出的术语/短语是否符合特定语境的要求,删除不符合要求的输出,将符合要求的输出结果存储到待分析语料对应的专业词库 .txt 文件中,至此,领域专业词库构建完毕。


  1. 专业术语/短语评判标准主要两条:(1)属于特定的语境,是该语境下的专有术语/短语,而非通用语境下的词语,例如: 数据智能 一词,就是人工智能语境下的专有术语/短语,在通用语境下往往会拆分为数据和智能两个词语,在人工智能语境下,这一词语拆分开就丧失其专有语义,无法满足后续分析的需要;(2)输出的词语能更好地加强对特定语境下,专业概念或语义的理解。例如,输出的 关键技术研发 一词,尽管也是有用的短语,但对人工智能专业概念或语义的理解支撑有限,因此就不必纳入专业词库。

Avatar
Wu, Jun
Associate professor
Next
Previous