【问题标题】:Stanford CoreNLP OpenIE by sentence?斯坦福 CoreNLP OpenIE 的句子?
【发布时间】:2018-01-17 02:39:51
【问题描述】:

我目前正在使用来自 Stanford CoreNLP 的 OpenIE 系统,使用它的 Java 命令行界面

java -mx32g -cp stanford-corenlp-3.8.0.jar:stanford-corenlp-3.8.0-models.jar:CoreNLP-to-HTML.xsl:slf4j-api.jar:slf4j-simple.jar edu.stanford.nlp.naturalli.OpenIE test_file.txt -threads 8 -resolve_coref true

我的测试文件包含 50,000 个句子,每行一个。

OpenIE 结果将是所有句子的元组列表。是否有一个标志可以设置为在每个元组和特定句子之间建立对应关系? (例如,有些句子可能没有提取,有些可能有多个。我怎么知道哪个是哪个?)

我目前的解决方案是拥有 50,000 个文件,每个文件一个句子。但这非常慢,因为每个文件都必须重新加载模型。

谢谢。

编辑:

我意识到 -filelist 标志使处理速度更快,这是一件好事。但遗憾的是,输出仍然无法区分不同的文件。

【问题讨论】:

  • 我不确定是否有标志,但是将 CoreNLP 作为服务器运行,然后使用 python(或任何其他语言)向它提供句子并检索解析后的数据相对简单。如果您使用此方法,服务器将不必在句子之间重新加载。

标签: stanford-nlp


【解决方案1】:

如果您使用混响格式 (-format reverb) 输出,您应该能够获取句子信息。此外,我希望您希望强制标记器在换行符上拆分句子 (-ssplit.newlineIsSentenceBreak always)。例如,以下命令应该可以工作,改编自您的示例:

java -mx8g -cp stanford-corenlp-3.8.0.jar:stanford-corenlp-3.8.0-models.jar:CoreNLP-to-HTML.xsl:slf4j-api.jar:slf4j-simple.jar \
    edu.stanford.nlp.naturalli.OpenIE \
    -threads 8 -resolve_coref true \
    -ssplit.newlineIsSentenceBreak always \
    -format reverb \
    input.txt

对于以下输入文件:

George Bush was born in Texas 
Obama was born in Hawaii

我在标准输出上得到以下输出(您可以将其重定向到带有-output <filename> 标志的文件):

input.txt   0   George Bush was born    0   2   2   3   3   4   1.000   George Bush was born in Texas   NNP NNP VBD VBN IN NNP  George Bush be  bear
input.txt   0   George Bush was born in Texas   0   2   2   5   5   1.000   George Bush was born in Texas   NNP NNP VBD VBN IN NNP  George Bush be bear in  Texas
input.txt   1   Obama   was born in Hawaii  0   1   1   4   4   5   1.000   Obama was born in Hawaii    NNP VBD VBN IN NNP  Obama   be bear in  Hawaii
input.txt   1   Obama   was born    0   1   1   2   2   3   1.000   Obama was born in Hawaii    NNP VBD VBN IN NNP  Obama   be  bear

第二行是句子索引;制表符分隔列的完整列表记录在 on the ReVerb README:

  1. 文件名(或标准输入,如果源是标准输入)
  2. 此次提取的句子编号。
  3. Argument1 个单词,空格分隔
  4. 关系短语单词,空格分隔
  5. Argument2 个单词,空格分隔
  6. 语句中参数 1 的起始索引。例如,如果值为 i,则 argument1 的第一个词是句子中的第 i-1 个词。
  7. 语句中argument1 的结束索引。例如,如果值为j,则argument1的最后一个词是句子中的第j个词。
  8. 关系短语的起始索引。
  9. 关系短语的结束索引。
  10. argument2 的起始索引。
  11. argument2 的结束索引。
  12. 此提取正确的置信度。数字越高,此提取的可信度越高。
  13. 此提取来自的句子中的单词,以空格分隔。
  14. 句子单词的词性标签,以空格分隔。
  15. 句子单词的块标签,空格分隔。这些代表句子的浅解析。
  16. arg1 的标准化版本。有关如何进行规范化的详细信息,请参阅 BinaryExtractionNormalizer javadoc。
  17. rel. 的规范化版本。
  18. arg2 的标准化版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多