Tag: nlp

java中的快速语义角色标记工具

我正在开发一个需要在Java中进行FAST语义角色标记的应用程序。 你能给我一些好的工具吗? 谢谢。

Hobbs的Coref Resolution算法

我已经实现了霍布斯的回指解析算法以及Lappin&Leass的替代排名。 让我感到困惑的是,算法的描述是完全非正式的,并且由于我的实现没有正确解决句子,我不确定限制是在我的实现还是在实际算法上。 这是我在Jurafsky&Martin找到的版本: 从名词短语(NP)节点开始,立即支配代词。 上树到遇到的第一个NP或句子(S)节点。 调用此节点X,并调用用于访问它的路径p。 以从左到右,广度优先的方式遍历节点X下面的所有分支到路径p的左侧。 建议遇到任何在其与X之间具有NP或S节点的NP节点作为先行词。 如果节点X是句子中最高的S节点,则按照新近度的顺序遍历文本中先前句子的表面解析树,最近的第一个; 每个树以从左到右,广度优先的方式遍历,并且当遇到NP节点时,建议将其作为先行词。 如果X不是句子中的最高S节点,请继续执行步骤5。 从节点X开始,将树向上移动到遇到的第一个NP或S节点。 调用此新节点X,并调用遍历的路径到达它p。 如果X是NP节点,并且如果路径p到X没有通过X立即占主导地位的标称节点,则建议X作为前提。 以从左到右,广度优先的方式遍历节点X下方的所有分支到路径p的左侧。 提出任何遇到的NP节点作为前提。 如果X是S节点,则以从左到右,广度优先的方式遍历节点X的所有分支到路径p的右侧,但不要低于遇到的任何NP或S节点。 提出任何遇到的NP节点作为前提。 转到步骤4 看第3步:“路径p的左边”。 我解释它的方式是从左到右迭代子树,直到我找到包含代词的分支(因此从代词到X的路径的一部分)。 在Java中: for (Tree relative : X.children()) { for (Tree candidate : relative) { if (candidate.contains(pronoun)) break; // I am looking to all the nodes to the LEFT (ie coming before) the path leading to […]

从解析树中获取某些节点

我正在研究一个涉及通过Hobbs算法进行回指解析的项目。 我使用Stanford解析器解析了我的文本,现在我想操作节点以实现我的算法。 目前,我不明白如何: 基于其POS标签访问节点(例如,我需要以代词开头 – 我如何得到所有代词?)。 使用访客。 我有点像Java的菜鸟,但是在C ++中我需要实现一个Visitor functor然后处理它的钩子。 我找不到Stanford Parser的Tree结构。 那是jgrapht吗? 如果是的话,你能否提供一些关于代码片段的指示?

在NLP的帮助下分析句子并提取人名,组织和位置

我需要使用NLP解决以下问题,您能否指出如何使用OpenNLP API实现此目的 一个。 如何判断一个句子是否暗示过去,现在或将来的某种行为。 (eg) I was very sad last week – past I feel like hitting my neighbor – present I am planning to go to New York next week – future 湾 如何找到与个人,公司或国家相对应的单词 (eg) John is planning to specialize in Electrical Engineering in UC Berkley and pursue a career with IBM). 人=约翰 公司= […]

如何使用WordNet或与wordnet相关实现基于类别的文本标记?

如何使用wordnet的类别(java作为接口)使用wordnet标记文本? 例 考虑句子: 1)计算机需要键盘,监视器,CPU才能工作。 2)汽车使用齿轮和离合器。 现在我的目标是,例句必须被标记为 第一句话 电脑/电子 键盘/电子 CPU /电子 第二句话 汽车/机械 齿轮/机械 离合/机械 一些额外的例子…… “使用微芯片监控离合器和齿轮” – >离合器/机械,齿轮/机械,微芯片/电子 “此处用于监测氢气水平的软件” – >软件/计算机,氢/化学.. 我想在java上实现上面提到的目标,即通过技术,机械,电气等相关类别来标记名词。 如何使用wordnet执行此操作。 我以前的作品 为了实现我的目标,我在每个类别的文本文件中创建了一个术语索引,并将其与标题匹配..如果它在文本文件中包含一个单词,则标题将被分类。 例如 Automobile.txt有car , gear , wheel , clutch 。 networking.txt有server,IP Address,TCP , RIP 这是算法: String Classify (String title) { String area; if (compareWordsFrom (“Automobile.txt”,title) == true ) area = […]

使用Stanford CoreNLP

我正在尝试使用Stanford CoreNLP。 我使用Web上的一些代码来了解coreference工具的用途。 我尝试在Eclipse中运行该项目但仍然遇到内存不足exception。 我尝试增加堆大小,但没有任何区别。 关于为什么会这种情况发生的任何想法? 这是特定于代码的问题吗? 任何使用CoreNLP的方向都会很棒。 编辑 – 已添加代码 import edu.stanford.nlp.dcoref.CorefChain; import edu.stanford.nlp.dcoref.CorefCoreAnnotations; import edu.stanford.nlp.pipeline.Annotation; import edu.stanford.nlp.pipeline.StanfordCoreNLP; import java.util.Iterator; import java.util.Map; import java.util.Properties; public class testmain { public static void main(String[] args) { String text = “Viki is a smart boy. He knows a lot of things.”; Annotation document = new Annotation(text); Properties […]

使用Stanford CoreNLP解析共享 – 无法加载解析器模型

我想做一个非常简单的工作:给一个包含代词的字符串,我想解决它们。 例如,我想把句子改为“玛丽有一只小羊羔。她很可爱。” 在“玛丽有一只小羊羔。玛丽很可爱。” 我曾尝试使用Stanford CoreNLP。 但是,我似乎无法启动解析器。 我已经使用Eclipse在我的项目中导入了所有包含的jar,并且我已经为JVM(-Xmx3g)分配了3GB。 错误非常尴尬: 线程“main”中的exceptionjava.lang.NoSuchMethodError:edu.stanford.nlp.parser.lexparser.LexicalizedParser.loadModel(Ljava / lang / String; [Ljava / lang / String;)Ledu / stanford / nlp / parser / lexparser / LexicalizedParser; 我不明白L来自哪里,我认为这是我问题的根源……这很奇怪。 我试图进入源文件,但那里没有错误的引用。 码: import edu.stanford.nlp.semgraph.SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation; import edu.stanford.nlp.dcoref.CorefCoreAnnotations.CorefChainAnnotation; import edu.stanford.nlp.dcoref.CorefCoreAnnotations.CorefGraphAnnotation; import edu.stanford.nlp.ling.CoreAnnotations.NamedEntityTagAnnotation; import edu.stanford.nlp.ling.CoreAnnotations.PartOfSpeechAnnotation; import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation; import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation; import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation; import edu.stanford.nlp.trees.TreeCoreAnnotations.TreeAnnotation; import edu.stanford.nlp.ling.CoreLabel; import edu.stanford.nlp.dcoref.CorefChain; import edu.stanford.nlp.pipeline.*; […]

用WordNet检测专有名词?

我正在使用JAWS访问WordNet 。 有一个词,有没有办法检测它是否是一个专有名词? 看起来这些同义词具有相当粗略的词汇类别。 澄清一下,没有任何语境 – 它们只是单独呈现。 如果一个词可以想象地用作普通名词,那么它是可以接受的。 所以“标记”很好,因为虽然它可能是某人的名字,但它也可以指代一个点。 但是,“非洲”不是。

使用WS4J的句子相似性

我想用ws4j来计算两个句子之间的相似性。 我正在使用WS4J @ WS4J在线演示的在线演示 我使用WS4J给出的默认示例句子。 输入句子并点击计算相似性按钮后,我得到以下输出: 在这里,我得到句子的单个标记之间的相似性。 我如何从这里继续前进。我想获得一个值(比如0.5或0.8),表示这两个句子的相似性。 有没有标准的方法从这里开始,还是我必须编写自己的算法?

Tokenize,使用Lucene和Java删除停用词

我试图用Lucene标记并删除txt文件中的停用词。 我有这个: public String removeStopWords(String string) throws IOException { Set stopWords = new HashSet(); stopWords.add(“a”); stopWords.add(“an”); stopWords.add(“I”); stopWords.add(“the”); TokenStream tokenStream = new StandardTokenizer(Version.LUCENE_43, new StringReader(string)); tokenStream = new StopFilter(Version.LUCENE_43, tokenStream, stopWords); StringBuilder sb = new StringBuilder(); CharTermAttribute token = tokenStream.getAttribute(CharTermAttribute.class); while (tokenStream.incrementToken()) { if (sb.length() > 0) { sb.append(” “); } sb.append(token.toString()); System.out.println(sb); } return […]