python - 计算文本相似度的最佳方法是什么?

标签 python nlp nltk

有一些方法可以检索文本之间的相似性,例如 wup_similarity() cosine_similarity() 等。我的目的是制作一个作文答题系统。这意味着我想比较答题卡和评分方案。到目前为止,我在没有使用任何训练或建模方法的情况下进行了以下操作。

1.预处理两个文档(删除标点符号,进行词形还原等)。

2.接下来我通过使用 word-net 同义词集得到相似的单词并制作了两个大数组(标记方案及其同义词和答题纸及其同义词)——可能不是正确的方法。

3.然后我需要比较这两个大数组,想得到相似度值

您能否通过提供一些建议或答案来帮助我解决这个问题。我知道 word-net 同义词集不是最好的,因为它会给出不相关的答案。 例如:animal 和 vehicle 将作为相似值返回 1。

但是我需要为此找到解决方案。

最佳答案

几乎每个搜索引擎都使用的标准方法是将 TF-IDF 向量与余弦相似度进行比较。这可能不会公正地完成您的任务,因为您正在谈论给定评分方案的论文评估。这还将包括检查重要命题的身份(在动词论元结构的意义上) 以及答案的修辞结构。这一点很重要,因为“columbus explored the American continent”可能在语义上与“the American continent explored Columbus”在语义上相关,但后者显然是无意义的(在大陆是主语的情况下)。也许看看话语表示理论 (DRT) 和需要为其建模的形式逻辑。比较你的文本的 DRT 会做得更好,也适用于议论文。

对于 DRT,您可能希望从以下内容开始:https://plato.stanford.edu/entries/discourse-representation-theory/#DRSLanSynSemAcc .它非常复杂,您的应用程序也是如此。另一种方法是使用依赖解析器从你的标记方案中提取最重要的命题,然后检查与一些论文答案相比有多少关系以及相似程度。为此,您可以使用向量的相似性度量或关系(动词)的嵌入以及具有各自角色(“主题”和“对象”)的参数。我认为在您使用完整的 DRT 之前尝试这样做是值得的,因为根据您的域定制它需要大量的工作。

关于python - 计算文本相似度的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58741873/

相关文章:

python - 获取每一行中第一次出现的索引

python - Python 嵌套 For 循环错误

python - 包含引号的文本的句子标记化

python - 使用 NLTK 比较术语/表达式的相似性?

java - 使用 NLTK 使用 MaltParser 解析多个句子

c++ - 从 C++ 运行一些命令行命令

python - 如何将对象实例传递给 SocketServer.BaseRequestHandler 实例?

python - NLTK CorpusReader 一次标记一个文件

python - 在 python 中使用正则表达式 re.split 拆分堆叠实体

python - Mosestokenizer 问题 : [WinError 2] The system cannot find the file specified