CoreNLP 如何获取NE位置(字符偏移量)所指的句子?

vq8itlhq  于 4个月前  发布在  其他
关注(0)|答案(6)|浏览(70)

情况

  1. 我将句子输入到一个管道(ssplit, tokenise, pos, lemma, ner)中。
  2. 这些句子在原始形式中包含换行符、一行多个空格以及其他您在原始数据中期望的混乱内容。
  3. 检测到的命名实体现在包含characterOffsetBegin和characterOffsetEnd。

问题

问题是这些偏移量与我原始的句子不对应,而是与经过分词步骤后的某个中间句子相对应,其中一些空白已被删除(由Stanford CoreNLP)。

我尝试过的方法

  • 我尝试以各种方式重构句子,例如
  • 通过将所有标记重新连接在一起,并在它们之间插入前后字符。但我从未得到完全匹配,许多命名实体位置也不匹配。
    问题

如何重构NE位置所指的完整句子?
我在Python中使用pycorenlp。

tzcvj98z

tzcvj98z1#

你能提供一个例子吗?
我完全没有看到这种行为。当你在文本上运行管道时,它会返回提供的字符串中检测到的实体的字符偏移量。

rdlzhqv9

rdlzhqv92#

好的,我对此进行了进一步的研究,似乎服务器在其他方面会删除前导换行符。我会尝试改进服务器对换行符的处理并回复您。

uubf1zoe

uubf1zoe3#

StanfordCoreNLP服务器的第316行:
text = URLDecoder.decode(text, encoding).trim();
这导致了前导换行符丢失。此外,请确保对您的请求进行编码,为了让它正常工作,我不得不发出这样的请求:
wget --post-data '%0AI love%0A%0A New York!' 'localhost:9000/?properties={"outputFormat":"json"}' -O -
目前,如果您的请求没有前导空格或换行符,它应该可以正常工作。我可能会将那一行更改以解决问题,但我不确定为什么最初会删除前导内容,所以我不确定更改它会破坏什么。

nc1teljy

nc1teljy4#

谢谢,@J38 !
让我进一步详细说明一下问题。

背景

我想要得到两样东西:

  1. 命名实体(NE)的位置(characterOffsetBegin & characterOffsetEnd),以及
  2. NE位置所指的完整句子(理想情况下,这是输入的原始句子,或者是其他版本)

问题

我对观察到的命名实体位置与实际NE位置不匹配的问题进行了进一步调查。
似乎有两个问题阻止我获得与NE位置对应的句子。

  • 句子开头的所有空白字符(" ","

",...)在计算NE位置之前会被修剪。一个句子 "
Samsung is a company." 会被处理成 "Samsung" 从偏移量零开始 - 尽管句子开头有 "
"。

  • 通常,句子内的空白字符不会被处理。这是可以的。特别是,这些空白字符可以在tokens的"before"和"after"字符中找到。这样我就可以重构句子。
  • 然而,如果两个单词之间只用换行符(

)分隔,那么tokens的"before"和"after"字符会存储"
",但characterOffsets将"
"视为长度为零。这使得很难重构与NE位置对应的句子。
我不是Maven。所以请随意指出显而易见的事情。我可能只是犯了一个小错误。

可能的处理方法及其后续问题

我考虑了很多处理方法。但它们都有自己的问题。

  • 如果我在将其输入Stanford管道之前先自己删除空白,我就永远无法确定我以正确的方式处理空白(即Stanford管道将以相同的方式处理它)。此外,如果两个单词之间只用换行符(

)分隔,我必须确保用一些空白替换它。

  • 如果我尝试通过将所有tokens重新连接在一起(在它们之间插入它们的"before"或"after"字符)来重构句子,那么我会遇到这样的问题:"

"字符会破坏NE位置。也就是说,如果出现在"after"或"before"字段中的"
",我需要将其替换为无内容。

c7rzv4ha

c7rzv4ha6#

我不确定哪种行为是正确的。
我真正需要的是命名实体的位置和一个句子(理想情况下,是原始的句子),它们对应于这些命名实体的位置。只有这样,我才能在文本中高亮显示命名实体或将它们掩盖起来,以便在句子上执行一些监督关系提取。
理想情况下,我不需要自己动手,并尝试复制斯坦福核心NLP内部所做的工作。因为我可能会犯错误,无法完美地复制它。
理想情况下,有一个额外的字段,输出NER实际上考虑的“转换后的”句子。或者NER会输出指向原始句子的NE位置,就像它被提供的那样。

相关问题