从句子中获取主题/焦点的算法

3
有没有一些知名或成功的算法,可以从问题句子中的单词获取主题和/或焦点?
如果没有的话,我该如何获取问题的主题/焦点?似乎问题的主题/焦点通常是名词或名词短语。
那么,我首先要做的是通过对问题进行词性标注来确定名词。但是,我应该只获取名词,还是获取名词和前面的形容词,或者名词和前面的副词,或者名词和动词?
例如:
在“did the quick brown fox jump over the lazy dog”中,获取“quick brown fox”、“jump”和“lazy dog”。
在“what is the population of japan”中,获取“population”和“japan”。
在“what color is milk”中,获取“color”和“milk”。
在“What is the height of Mt. Everest”中,获取“Mt. Everst”和“Height”。
写这些时,我发现最简单的方法是去除停用词。

你能举个例子说明你想要什么吗? - Rob Neuhaus
你知道,自然语言处理并不是一个算法本身就能完成的。这是一个需要深入研究的领域。我认为你不可能通过在 SO 上提问来学习它。 - Filipe Gonçalves
@RobNeuhaus 已更新问题。 - gramme.ninja
@FilipeGonçalves 是的,我知道。但在自然语言处理领域,有一些非常成功的方法可以实现某些事情。 - gramme.ninja
2个回答

4
我认为首先问题是与语言相关的。其次,如果你有一组单词,可以检查它们在语言中的流行度/频率;例如,“the”这个词比“euphoric”这个词出现得更多,因此“euphoric”更有可能成为一个适当的关键词。
然而,拼写的重要性在这里非常关键。如何处理?一个想法是使用距离算法,比如Levenshtein,对不经常出现的单词进行处理(或者用该单词进行谷歌搜索,并检查是否获得了结果或“did-you-mean”通知)。
有些语言比其他语言更有结构性。在英语中,要找到名词,可以先运行“a/an word”的检查,然后再运行以“s”结尾的单词来寻找可能的名词候选项。然后将其与字典进行比较。
对于形容词,你可以假设一个可能的形容词就位于名词的前面。然后只需将可能的形容词与字典进行比较。
然后,你当然可以保留永远不允许作为关键词的单词的黑名单。
最好的解决方案可能是拥有一个自学习的神经系统,但我对此并不熟悉,无法提供任何建议。

谢谢,这让我明白了。现在要学习如何制作一个自学习神经系统。 - gramme.ninja
没有问题。希望这有所帮助!不过,名词和形容词的识别仍需要进一步阐述 :) - Sara S

3

这可以被视为一个解析问题,我个人发现斯坦福自然语言处理工具非常有效。

这里是斯坦福解析器演示的链接

以例子来说,快速的棕色狐狸跳过了懒狗 你得到的输出结果是:

did/VBD
the/DT
quick/JJ
brown/JJ
fox/NN
jump/VB
over/RP
the/DT
lazy/JJ
dog/NN

从输出结果中,您可以编写一个提取器以提取名词(如果需要,也可以提取形容词和副词),从而从句子中获取主题。

此外,解析树如下所示:

(ROOT
  (SINV (VBD did)
    (NP (DT the) (JJ quick) (JJ brown) (NN fox))
    (VP (VB jump)
      (PRT (RP over))
      (NP (DT the) (JJ lazy) (NN dog)))))

如果您仔细查看解析树,您期望的输出都是NP(名词短语)-“快速棕色狐狸”和“懒惰的狗”。希望这可以帮助您!

是的,非常感谢!你能给我解释一下解析树以及如何进行提取吗?我知道如何对单词进行词性标注,但是如何在代码中实现解析树提取呢? - gramme.ninja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接