2017-03-06 96 views
-2

我需要在字符串中的某个单词的任一侧提取上下文单词。在这种情况下,特定的单词属于字符串中的专有名词。例如。在句子的某个单词的任一侧获取n个单词

我喜欢玛莎的蛋糕,因为它们太好吃了!

在这种情况下,玛莎是一个专有名词,我想提取玛莎任何一方的4个词,以便能够将玛莎分类为名称,地点或组织。在这种情况下,烘焙是我的线索,Marth是一个人。我正在查看4的窗口大小,但是在目标单词两侧少于4个单词的情况下或者如果它是句子的第一个单词怎么办?

所以基本上:

  1. 我想获得对目标词的两侧4个字。
  2. 将它们放在两个单独的列表中,分别称为leftWords和rightWords
  3. 检查是否少于4个单词,然后减小窗口大小并获取任意一侧可用的任意数量的单词。
+2

你有任何实际的代码? –

+2

请提供您到目前为止所尝试的内容,SO不是一项编码服务。 –

+0

@TimBiegeleisen我确实有代码,但我目前的做法是使用nlp工具从句子中获取块,并从块中获取上下文单词。但在大多数情况下,我意识到专有名词会分裂成自己的大块,因此没有任何语境词汇。所以我决定尝试使用窗口从整个句子中提取上下文单词。所以我真的没有有效的代码来分享。对于那个很抱歉。只是关于如何使窗口灵活的想法就可以做到。 – serendipity

回答

1

我假设你有相关专有名称的开始和结束索引(在I love the cakes Martha bakes as they are so delicious!的情况下,我认为它们将是17和23)。

建议您在两个子字符串中取出正确名称前后的句子部分,然后使用正则表达式来匹配所需的单词数。在我们的示例中,Martha之前的子字符串是I love the cakes,而正则表达式\S+(\s+\S+){0,3}\s*$将在该子字符串的末尾匹配最多四个由空白分隔的单词(在这种情况下,它将是整个字符串,但如果有更多单词,它只会是最后四个)。您必须从所需数量的字中减去1,并在表达式中填入3的结果。

我相信你对名称后面的单词采用类似的方式。

相关问题