在句子中的特定单词的两侧获得n个单词

时间:2017-03-06 09:56:42

标签: java string

我需要在字符串中的特定单词的两侧提取上下文单词。在这种情况下,特定单词与字符串中的专有名词有关。 E.g。

我喜欢Martha烘焙的蛋糕,因为它们非常美味!

在这种情况下,Martha是一个专有名词,我想在Martha的两边提取4个单词,以便能够将Martha归类为名称,位置或组织。在这种情况下,烘烤是我的线索,Marth是一个人。我正在查看4的窗口大小,但是在目标词的两边少于4个单词的情况下,或者如果它是句子的第一个单词的话。

基本上是这样的:

  1. 我想在目标词的两边加4个字。
  2. 将它们放在两个名为leftWords和rightWords
  3. 的单独列表中
  4. 检查是否少于4个单词然后缩小窗口大小并获得任何一方可用的单词数。

1 个答案:

答案 0 :(得分: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的结果。

我相信你会对名字后的字词做同样的事情。