我的工作在于在noun+verb句子中查找(可以)查询,然后提取对象.
例如:"coding is sometimes a tough work."我的查询是:"coding is".
我得到的类型依赖是:
nsubj(work-6, coding-1)
cop(work-6, is-2)
advmod(work-6, sometimes-3)
det(work-6, a-4)
amod(work-6, tough-5)
Run Code Online (Sandbox Code Playgroud)
我的程序应该提取nsubj依赖项,识别"coding"为查询并保存"work".
可能这看起来很简单,但直到现在,我还没有找到能够提取特定类型依赖关系的方法,我真的需要这个才能完成我的工作.
欢迎任何帮助,
想知道是否有任何工具可以帮助我在文本中检测代词的名称.
例
Jone is Spanish. He can speak German.
Run Code Online (Sandbox Code Playgroud)
我如何标记He来Jone?
我目前正在使用斯坦福NLP集团的不同工具,并试图了解它们之间的差异.在我看来,他们彼此交叉,因为我可以在不同的工具中使用相同的功能(例如,标记化,POS-Tag,句子可以由Stanford POS-Tagger,Parser和CoreNLP完成).
我想知道每个工具之间的实际区别是什么,以及我应该在哪些情况下使用它们.
斯坦福CoreNLP的网站
http://nlp.stanford.edu/software/corenlp.shtml
列出了几十个像魅力一样工作的注释器.我想使用Annotators的实例来处理多个线程的常见任务(词形还原,标记,解析).例如,将大量(GB文本)的处理拆分为线程或提供Web服务.
过去有一些讨论引用了LocalThreads,根据我的理解,它使用每个线程的一个Annotator实例(从而避免了线程安全方面的问题).这是一个选项,但这样所有模型文件和资源也必须加载n次.
Annotators(或其中一些)是否可以使用线程安全?我在讨论,文档或常见问题中找不到任何结论性/官方性的内容.
我试图创建一个python进程,读取一些输入,处理它并打印出结果.处理由子流程(斯坦福大学的NER)完成,对于ilustration,我将使用'cat'.我不确切知道NER会给出多少输出,所以我使用一个单独的线程来收集它并打印出来.以下示例说明.
import sys
import threading
import subprocess
# start my subprocess
cat = subprocess.Popen(
['cat'],
shell=False, stdout=subprocess.PIPE, stdin=subprocess.PIPE,
stderr=None)
def subproc_cat():
""" Reads the subprocess output and prints out """
while True:
line = cat.stdout.readline()
if not line:
break
print("CAT PROC: %s" % line.decode('UTF-8'))
# a daemon that runs the above function
th = threading.Thread(target=subproc_cat)
th.setDaemon(True)
th.start()
# the main thread reads from stdin and feeds the subprocess
while True:
line = sys.stdin.readline()
print("MAIN PROC: %s" % line)
if not …Run Code Online (Sandbox Code Playgroud) 我正在使用CoreNLP神经网络依赖性解析器来解析一些社交媒体内容.不幸的是,该文件包含的字符根据fileformat.info,不是有效的unicode字符或unicode替换字符.这些是例如U + D83D或U + FFFD.如果这些字符在文件中,coreNLP会回复错误消息,如下所示:
Nov 15, 2015 5:15:38 PM edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+D83D, decimal: 55357)
Run Code Online (Sandbox Code Playgroud)
根据这个答案,我试图document.replaceAll("\\p{C}", "");删除这些字符.document这里只是一个字符串的文档.但这没有帮助.
在将字符串传递给coreNLP之前,如何从字符串中删除这些字符?
更新(11月16日):
为了完整起见,我应该提一下,我只是为了通过预处理文件来避免大量的错误消息而问这个问题.CoreNLP只是忽略它无法处理的字符,所以这不是问题.
我希望使用Stanford CoreNLP捕获测量结果.(如果你可以建议一个不同的提取器,那也没关系.)
例如,我想找到15千克,15公斤,15.0公斤,15公斤,15磅,15磅等,但其中CoreNLPs抽取规则,我没有看到一个用于测量.
当然,我可以使用纯正则表达式执行此操作,但工具包可以更快地运行,并且它们提供了更高级别的块的机会,例如将gb和GB一起处理,RAM和内存作为构建块 - 即使没有完整语法分析 - 因为它们构建了更大的单元,如128 gb RAM和8 GB内存.
我想要一个基于规则的提取器,而不是基于机器学习的提取器,但是不要将其作为RegexNer或其他地方的一部分.我该怎么做?
IBM命名实体提取可以做到这一点.正则表达式以有效的方式运行,而不是将文本传递给每个正则表达式.并且正则表达式被捆绑以表达有意义的实体,例如将所有测量单元组合成单个概念的实体.
nlp named-entity-recognition stanford-nlp named-entity-extraction
我的最后一年工程项目要求我使用Java或Python构建应用程序,该应用程序使用自然语言处理来总结文本文档.我怎么开始编程这样的应用程序?
基于一些研究,我刚才注意到基于提取的摘要对我来说是最好的选择,因为它不像基于抽象的算法那么复杂.即便如此,如果有人能指引我朝着正确的方向前进,那将会非常有帮助.
我正在尝试让Stanford CoreNLP作为服务器正常运行(虽然问题可能影响非服务器使用),但不断收到此错误:
"ERROR CoreNLP - Failure to load language specific properties".
它仍然有效,但可能没有它需要的一切才能运作良好.
我从基础下载开始.当我看到上面的错误时,我下载并放置在CoreNLP目录中的英文模型jar和english-kbp模型jar.这两个是巨大的,似乎不对应基本下载中的任何内容.但是,在重新启动服务器后,我仍然遇到上述错误.我也尝试过添加
-serverProperties StanfordCoreNLP-english.properties
到命令行,但这会给出一个错误,说它无法读取属性文件.
任何人都知道我错过了什么?
在斯坦福依赖手册中,他们提到了“斯坦福类型依赖”,特别是“neg”类型 - 否定修饰符。当使用网站使用斯坦福增强++解析器时,它也可用。例如,句子:
“巴拉克奥巴马不是出生在夏威夷”
解析器确实找到了 neg(born,not)
但是当我使用stanfordnlppython 库时,我能得到的唯一依赖解析器将解析句子如下:
('Barack', '5', 'nsubj:pass')
('Obama', '1', 'flat')
('was', '5', 'aux:pass')
('not', '5', 'advmod')
('born', '0', 'root')
('in', '7', 'case')
('Hawaii', '5', 'obl')
Run Code Online (Sandbox Code Playgroud)
以及生成它的代码:
import stanfordnlp
stanfordnlp.download('en')
nlp = stanfordnlp.Pipeline()
doc = nlp("Barack Obama was not born in Hawaii")
a = doc.sentences[0]
a.print_dependencies()
Run Code Online (Sandbox Code Playgroud)
有没有办法获得与增强型依赖解析器或任何其他导致类型化依赖的斯坦福解析器类似的结果,这会给我否定修饰符?
stanford-nlp ×10
nlp ×6
java ×3
parsing ×3
python ×2
regex ×1
subprocess ×1
unicode ×1
weka ×1