注意

Parser针对已分好词的中文句子生成语义生成树。

Parser下载地址

https://nlp.stanford.edu/software/lex-parser.shtml

API(Java)

将Jar包导入到项目后在Java程序中import一下

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.io.*;import edu.stanford.nlp.process.DocumentPreprocessor;
import edu.stanford.nlp.ling.HasWord;
import edu.stanford.nlp.ling.TaggedWord;
import edu.stanford.nlp.trees.*;
import edu.stanford.nlp.parser.lexparser.LexicalizedParser;

不带词性的句子

在将不带词性分好词的句子输入到Parser中,会被Parser自动的进行词性标注,然后生成语义生成树。下面的代码是基于Parser一起提供的样例代码修改的。由于这个样例代码中使用的读封装好的类来读取句子,按照提供的代码去跑自己的数据发现这个样例本身是为一个句子设计的,也就是说它不会自动断句。自己没有找到相关的说明文档,所以在这个样例基础之上简单地手动切分句子。其中,String类型的doc\oh\en\up变量分别是代表着几种句子结尾的标点符号。
这里使用的文本文件作为输入,同时将生成树也输出到文本文件。

class ParserDemo {public static void main(String[] args) {String parserModel = "edu\\stanford\\nlp\\models\\lexparser\\chinesePCFG.ser.gz";String testFile = "C:\\Users\\codinglee\\Desktop\\NLP\\Project_coding\\data\\test.txt";String outTest = "C:\\Users\\codinglee\\Desktop\\NLP\\Project_coding\\cpp\\cpp\\testTree.txt";demoDP(parserModel, testFile, outTest);}/*** demoDP demonstrates turning a file into tokens and then parse* trees.  Note that the trees are printed by calling pennPrint on* the Tree object.  It is also possible to pass a PrintWriter to* pennPrint if you want to capture the output.* This code will work with any supported language.*/public static void demoDP(String parserModel,  String filename, String outname) {// This option shows loading, sentence-segmenting and tokenizing// a file using DocumentPreprocessor.LexicalizedParser lp = LexicalizedParser.loadModel(parserModel);TreebankLanguagePack tlp = lp.treebankLanguagePack(); // a PennTreebankLanguagePack for Englishtry {FileWriter fw=new FileWriter(outname);PrintWriter pw=new PrintWriter(fw);for (List<HasWord> sentence : new DocumentPreprocessor(filename)) {String doc="。";String oh = "!";String en = "?";String up = "''";int n = sentence.size(), cur = 0, next = 0, step = 1;for (; cur<n;) {for (; next<n; next++) {String tmp = sentence.get(next).toString();if (tmp.equals(doc) || tmp.equals(oh) || tmp.equals(en)) {if (next + 1 < n && sentence.get(next+1).toString().equals(up))next++;break;}}if (cur < next) {next++;System.out.print(step);System.out.print(" -> ");System.out.print(cur);System.out.print(", ");System.out.print(next);System.out.print(": ");System.out.println(sentence.subList(cur,next));Tree parse = lp.apply(sentence.subList(cur,next));parse.pennPrint(pw);cur = next;step += 1;}}}pw.close();}catch (IOException e) {e.printStackTrace();}}
}

带词性标注的句子

自己有带词性标注好句子时,希望使用自己的这个词性标注时,会用到TaggedWord来为单词添加词性。下面代码中“dev.txt”保存的分好词的句子,“devAttr.txt”是对应“dev.txt”中单词的词性标注。“devTree.txt”保存生成的语义生成树。

class ParserDemo {public static void main(String[] args) {String parserModel = "edu\\stanford\\nlp\\models\\lexparser\\chinesePCFG.ser.gz";String leeWord = "C:\\Users\\codinglee\\Desktop\\NLP\\Project_coding\\data\\dev.txt";String leeAttr = "C:\\Users\\codinglee\\Desktop\\NLP\\Project_coding\\data\\devAttr.txt";String leeOut = "C:\\Users\\codinglee\\Desktop\\NLP\\Project_coding\\data\\devTree.txt";demoLee(parserModel, leeWord, leeAttr, leeOut);}public static void demoLee(String parserModel, String leeWord, String leeAttr, String leeOut) {// This option shows loading, sentence-segmenting and tokenizing// a file using DocumentPreprocessor.LexicalizedParser lp = LexicalizedParser.loadModel(parserModel);TreebankLanguagePack tlp = lp.treebankLanguagePack(); // a PennTreebankLanguagePack for Englishtry {FileWriter fw=new FileWriter(leeOut);PrintWriter pw=new PrintWriter(fw);FileReader frWord = new FileReader(leeWord);BufferedReader brWord = new BufferedReader(frWord);FileReader frAttr =new FileReader(leeAttr);BufferedReader brAttr = new BufferedReader(frAttr);String line = "";String[] words = null;String[] attrs = null;int counter = 1;while ((line=brWord.readLine())!=null) {if (line.length() > 0) {words=line.split(" ");attrs = brAttr.readLine().split(" ");
//          while (attrs.length == 0)
//            attrs = brAttr.readLine().split(" ");System.out.println(counter+"th parser is moving on --->>> "+words.length+" - "+attrs.length);List sentence = new ArrayList();for (int i=0; i<words.length; i++) {
//            System.out.println(i+"th: "+words[i]+" "+attrs[i]);sentence.add(new TaggedWord(words[i], attrs[i]));}Tree parse = lp.parse(sentence);
//          parse.pennPrint();parse.pennPrint(pw);pw.println(counter);counter++;}}brAttr.close();brWord.close();pw.close();}catch (IOException e) {e.printStackTrace();}}
}

StandFord的parser的调用API相关推荐

  1. 调用API弹出打印机属性对话框

    调用api弹出打印机属性对话框  Author:vitoriatang From:Internet .NET Framework封装了很多关于打印的对话框,比如说PrintDialog, PageSe ...

  2. C#调用API向外部程序发送数据(转载)

    转自:http://www.cnblogs.com/trieagle/p/3811375.html C#调用API向外部程序发送数据 最近有可能要做一个项目.在项目中有这么一个功能,在A程序中调用B程 ...

  3. AHK调用API获取ListView每列的坐标

    以下代码获取前3列的横坐标: d_Index 为每列的序号(从 0 开始),lv_ID 为ListView的关联变量名,colW_1.colW_2.colW_3 分别为获取到的每列的横坐标. Loop ...

  4. 后端调用python_【后端开发】python如何调用api接口

    python调用api接口的方式: 接口协议:http.webservice.rpc等. 请求方式:get.post方式 请求参数格式: a. get请求都是通过url?param=xxx&p ...

  5. python消息推送_Python阿里云消息推送调用API

    很多公司测试APP推送时候,应该也是很头疼:推送环境:测试.正式,稍不注意就把测试的push到正式上,导致所有用户都收到 例子很多: 其实阿里.极光都有推送Api,直接调用API就ok,特别是有的公司 ...

  6. web api接口开发实例_小程序开发如何调用 API 接口,以豆瓣电影为例

    API 调用是开发者在小程序开发过程中经常会遇到的问题,本期我们以为调用豆瓣电影 API 为例具体来看 API 的调用过程以及常见的一些问题. 测试用到的小程序是「电影周周看」,内容来自清华大学软件学 ...

  7. C/C++中调用api设置mysql连接的编码方式

    MySQL在C/C++中调用api设置连接mysql的编码方式有以下几种方法: 1. mysqli_set_charset 调用示例: [cpp] view plain copy ret = mysq ...

  8. [转]c#调用API截图

    转自http://blog.csdn.net/hailiannanhai/article/details/6281471 要想完成这个功能,首先要了解一下在C#中如何调用API(应用程序接口)函数.虽 ...

  9. 防止多重启动之调用Api [收集2005090201]

    防止多重启动之调用Api (效果:第二次启动程序则前一进程的窗口跳到最前) using System.Threading; private const int SW_NORMAL = 1; // se ...

最新文章

  1. GridView利用FootTemplate插入新记录
  2. python wxpy_wxpy
  3. 移动平台MOBA发热与帧率优化
  4. 直播|百度AI开发者大会深度学习直播课程表
  5. 转:如何求出grid图像每个cell对应的x,y坐标?
  6. zoj 3620 Escape Time II
  7. FYFG的完整形式是什么?
  8. Qt工作笔记-QT_BEGIN_NAMESPACE与QT_END_NAMESPACE的理解
  9. Unity面试题精选(5)
  10. Visual Assist X是个好东西呀
  11. web安全实践系列导航
  12. linux环境编程apue和unp,UNIX高级环境编程:源码(apue)下载 编译和运行
  13. HackerRank笔记 - SQL Server
  14. Java(Jdk1.8)通过ODBC 连接数据库(以SQLServer为例)
  15. matlab求取状态方程的传递函数并实现系统解耦
  16. js生成execl表格
  17. 关于需求响应式公共交通的那些事(上)
  18. android6自定义锁屏,Android自定义控件系列之:锁屏页
  19. 敏捷项目管理实战第一天 敏捷开发SCURM的前世今生
  20. 【转】Kbps、KB、Mbps单位换算

热门文章

  1. 要警惕眼睛有红血丝和黑点!
  2. MATLAB算法实战应用案例精讲-【数模应用】多元线性回归(MLR)(附Java、R语言、python和matlab代码实现)
  3. 项目介绍|Mirror:用户创造,用户所有
  4. linux默认csh修改命令,修改shell 将当前shell(默认是bash B SHELL )改为csh C SHELL...
  5. stm32 控制电机 舵机Futaba S3010
  6. 【网络】报文封装整体结构
  7. 马匹、马镫、马车,和华为的数据基础设施革新
  8. db2 创建样本数据库_DB2创建数据库示例
  9. Arduino智能小车——拼装篇
  10. 计算机服务器中了360后缀勒索病毒,正确的解密恢复数据库的方式有哪些