使用Python,我需要对引用的存在进行评分,包含大约2-7个单词,更长的文本。引号不必精确匹配文本,但类似的单词应该具有相同的顺序。
例如,给定以下长文:
世界上最美丽的事物是无法看到或触动的,它们是用心去感受的
以下引号应评为高(例如,高于80/100):
我们世界的美好事物
世界看不到
他们用心去感受
由于它们不准确,但它们保留了顺序。
另一方面,这些报价应该更低(例如,低于50/100):
无法感受到美丽的心脏
他们是世界上最受欢迎的
这些词甚至没有出现在本文
上
因为(前2个)完全出现在文本中,但不保留顺序。
只需检查文本中每个单词的存在就无法完成此任务。我不知道哪种算法最适合这项任务。
fuzzywuzzy
(partial_token_sort_ratio
,token_sort_ratio
等)中的大多数功能都会将后面的条款评为更高。
partial_ratio
确实将较早的条款评为较高,但引用
这些词甚至没有出现在本文
上
得到52/100这是不合理的高。
如上所述,如何使用python对较长文本中短引号的存在进行评分?
答案 0 :(得分:0)
我相信你可以通过调整longest increasing subsequence问题来突破障碍。在您的情况下,子序列将引用单词位置,有效地将“增加”定义为“在原始短语中稍后出现”。您可以通过轻微奖励引号中出现的其他单词来修改它。
例如,给出你的文字
The most beautiful things in the world cannot be seen or touched, they are felt with the heart
让我们对这两个引语进行评分
The beautiful thing in our world
The beautiful heart cannot be felt or seen
这些将编码文本的单词位置:
The beautiful thing in our world
1 3 4 5 -1 7
The beautiful heart cannot be felt or seen
1 3 18 8 9 15 11 10
第一个在7的范围内(在文本中)总共7个中有6个单词的序列增加,并且缺少picayune人称代词。第二个序列增加了5个单词,“美丽无法看见”(取最近的),10个单词中的8个单词,以及3个“回归”(顺序倒置)。
从这里开始,我希望您可以通过一些示例编写自己的评估函数,或者只是选择一些特征定义函数,并将一个简单的模型拟合为您提供的“基础事实”标签。我明白了
这足以让你感动吗?
答案 1 :(得分:0)
这是一个开放式的问题,所以我会尝试添加一些可能有助于推动球的想法。它们与您尝试的内容重叠,但可能会增加一些见解。
您可能希望利用WordNet(NLTK has an interface)来识别等价类中的单词(例如"感觉"〜"感觉"和"事物"〜"事物",其中〜代表字等价)。
当你试图获得更好的准确性时,你会发现它变得复杂,因为"感觉"可以是名词或动词。在名词案例"毡"不是〜感觉"在动词的情况下(它是过去时的"感觉")。另外,对于短子串,部分语音标记器更难以确定单词的哪个词性。在任何情况下,您都应该能够通过使用NLTK(WordNet entry for "felt")在WordNet中搜索来找到相应的单词。
一旦您能够在目标字符串中识别子字符串中的单词,就可以通过多种方式进行操作,其中一些方法已经提及。
我还建议您查看类似于针对您的问题的最小编辑距离算法的内容。您希望支持诸如插入单词,删除单词,交换单词以及等效单词替换等操作;并且你想要惩罚诸如单词交换之类的东西,以及从较长的引用中遗漏的单词。我们的想法是尝试转换短引号以匹配较长引用中的子字符串。
例如:
世界上最美丽的事物是无法看到或触动的 感受到了内心的感受
1)"世界看不到"有编辑距离1,因为你必须添加" be"到子串以匹配目标字符串。
2)"美丽的心脏无法被感知或看到"有编辑距离说10.5(如果你看到一个较小的编辑距离,用它替换它:))
在这里,我冒昧地分配得分.5来识别不完全相同的单词,以及单词交换的罚分为5。我没有因为遗漏的话而受到惩罚。请参阅Damerau–Levenshtein distance,其中讨论了可以开始实施的交换。