现在的位置: 主页 > 公司荣誉 > 文章正文

Python与自然语言处理(二)基于Gensim的Word2Vec

作者:福州市名人视觉形象设计职业培训学校 来源:www.mrssjy.com 发布时间:2017-09-07 13:10:23
Python与自然语言处理(二)基于Gensim的Word2Vec

Python与自然语言处理(二)基于Gensim的Word2Vec。

实验环境:Python3,Java8

Word2Vec的输入是句子序列,而每个句子又是一个单词列表,由于没有这样结构的现成输入,所以决定自己动手对原始语料进行预处理。

NLPIR是一个汉语分词系统,挺感谢张华平博士,便利了我们的文本处理工作。

NLPIR可以应用于C/C++/C#/Java/Python,我尝试了Java和Python两个版本,只是Python版在测试的时候报错:初始化失败!费解了半天也没找出到底是什么原因,因而先转向使用Java版的。

NLPIR-Java使用起来比较简单,首先下载zip文件,我的是【20160405172043_ICTCLAS2016分词系统下载包.zip】

然后解压,调用sample目录下的JnaTest_NLPIR项目即可。有两个地方需要注意:第16行的dll路径,根据自己的路径修改,可以考虑放在项目里;第44行的ICTCLAS路径,即解压文件里的bin下的ICTCLAS2015文件夹的路径,也可以考虑放在项目里。如果这两个文件是放在项目里的,那么解压文件里还有一个Data文件夹需要放在项目里的ICTCLAS2015下。结构如下:

\

修改好后便可以测试了。

package code; import java.io.UnsupportedEncodingException; import utils.SystemParas; import com.sun.jna.Library; import com.sun.jna.Native; public class NlpirTest { // 定义接口CLibrary,继承自com.sun.jna.Library public interface CLibrary extends Library { // 定义并初始化接口的静态变量,该路径根据实际dll路径修改,32位或64位也根据实际情况修改 CLibrary Instance = (CLibrary) Native.loadLibrary( "D:\\NLPIR\\bin\\ICTCLAS2013\\x64\\NLPIR", CLibrary.class); public int NLPIR_Init(String sDataPath, int encoding, String sLicenceCode); public String NLPIR_ParagraphProcess(String sSrc, int bPOSTagged); public String NLPIR_GetKeyWords(String sLine, int nMaxKeyLimit, boolean bWeightOut); public String NLPIR_GetFileKeyWords(String sLine, int nMaxKeyLimit, boolean bWeightOut); public int NLPIR_AddUserWord(String sWord);//add by qp 2008.11.10 public int NLPIR_DelUsrWord(String sWord);//add by qp 2008.11.10 public String NLPIR_GetLastErrorMsg(); public void NLPIR_Exit(); } public static String transString(String aidString, String ori_encoding, String new_encoding) { try { return new String(aidString.getBytes(ori_encoding), new_encoding); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { String argu = "D:\\NLPIR"; // String system_charset = "GBK";//GBK----0 String system_charset = "UTF-8"; //UTF-8----1 int charset_type = 1; int init_flag = CLibrary.Instance.NLPIR_Init(argu, charset_type, "0"); String nativeBytes = null; if (0 == init_flag) { nativeBytes = CLibrary.Instance.NLPIR_GetLastErrorMsg(); System.err.println("初始化失败!fail reason is "+nativeBytes); return; } //sInput是原始待处理字符串 String sInput = "据悉,质检总局已将最新有关情况再次通报美方,要求美方加强对输华玉米的产地来源、运输及仓储等环节的管控措施,有效避免输华玉米被未经我国农业部安全评估并批准的转基因品系污染。"; try { //分词和标注处理,1表示标注,0表示不标注 nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1); System.out.println("分词结果为: " + nativeBytes); //添加用户自定义词语 CLibrary.Instance.NLPIR_AddUserWord("要求美方加强对输 n"); CLibrary.Instance.NLPIR_AddUserWord("华玉米的产地来源 n"); nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1); System.out.println("增加用户词典后分词结果为: " + nativeBytes); //删除用户自定义词语 CLibrary.Instance.NLPIR_DelUsrWord("要求美方加强对输"); nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 1); System.out.println("删除用户词典后分词结果为: " + nativeBytes); int nCountKey = 0; //获取关键词,第二个参数是最大关键词数量,默认为50;第三个参数表示是否输出权重 //每个关键词以#分隔,若有权重输出,则权重分别为信息熵权重与词频权重,权重以/分隔 String nativeByte = CLibrary.Instance.NLPIR_GetKeyWords(sInput, 10,false); System.out.print("关键词提取结果是:" + nativeByte); //获取文件关键词,第二个参数是最大关键词数量,默认为50;第三个参数表示是否输出 //权重,该权重表示信息熵权重。 //测试NLPIR的readme文件 nativeByte = CLibrary.Instance.NLPIR_GetFileKeyWords("D:/Readme.txt", 10,false); System.out.print("关键词提取结果是:" + nativeByte); //退出 CLibrary.Instance.NLPIR_Exit(); } catch (Exception ex) { // TODO Auto-generated catch block ex.printStackTrace(); } } } 测试输出: 分词结果为: 据悉/v ,/wd 质检/vn 总局/n 已/d 将/d 最新/a 有关/vn 情况/n 再次/d 通报/v 美方/n ,/wd 要求/v 美方/n 加强/v 对/p 输/v 华/b 玉米/n 的/ude1 产地/n 来源/n 、/wn 运输/vn 及/cc 仓储/vn 等/udeng 环节/n 的/ude1 管/v 控/v 措施/n ,/wd 有效/ad 避免/v 输/v 华/b 玉米/n 被/pbei 未经/d 我国/n 农业部/nt 安全/an 评估/vn 并/cc 批准/v 的/ude1 转基因/n 品系/n 污染/vn 。/wj 增加用户词典后分词结果为: 据悉/v ,/wd 质检/vn 总局/n 已/d 将/d 最新/a 有关/vn 情况/n 再次/d 通报/v 美方/n ,/wd 要求美方加强对输/n 华玉米的产地来源/n 、/wn 运输/vn 及/cc 仓储/vn 等/udeng 环节/n 的/ude1 管/v 控/v 措施/n ,/wd 有效/ad 避免/v 输/v 华/b 玉米/n 被/pbei 未经/d 我国/n 农业部/nt 安全/an 评估/vn 并/cc 批准/v 的/ude1 转基因/n 品系/n 污染/vn 。/wj 删除用户词典后分词结果为: 据悉/v ,/wd 质检/vn 总局/n 已/d 将/d 最新/a 有关/vn 情况/n 再次/d 通报/v 美方/n ,/wd 要求/v 美方/n 加强/v 对/p 输/v 华玉米的产地来源/n 、/wn 运输/vn 及/cc 仓储/vn 等/udeng 环节/n 的/ude1 管/v 控/v 措施/n ,/wd 有效/ad 避免/v 输/v 华/b 玉米/n 被/pbei 未经/d 我国/n 农业部/nt 安全/an 评估/vn 并/cc 批准/v 的/ude1 转基因/n 品系/n 污染/vn 。/wj 字符串关键词提取结果是:华玉米的产地来源#农业部#有关#污染# 文件关键词提取结果是:NLPIR#ICTCLAS#NLPIR2014#Website#ICTCLAS2014#Linux#Readme.txt#test#Java#English.txt#

分词、词性标注和关键词提取的功能均可用,其他功能可以参考NLPIR下的doc目录里的使用说明文件。

用NLPIR对原始语料分词后,将分词结果保存在corpus_result.txt文件中,接下来将该文件应用于Python版的Word2Vec中。

首先需要在Python中安装gensim,可用命令pip install gensim

\

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站建设 http://wuhan.45qun.com

上一篇:更新、插入tableview某一行数据或section数据 下一篇:最后一页