我有几篇非英语的文章。我想对它们进行风格上的比较。
比较风格的一种方法是寻找相似的短语。如果我在一本书“钓鱼,滑雪和徒步旅行”中发现了几次,而在另一本书“钓鱼,徒步旅行和滑雪”中,风格上的相似性指向了一个作者。我还需要能够找到“钓鱼,甚至滑雪或徒步旅行”。理想情况下,我也会找到“垂钓,徒步旅行和滑雪”,但因为它们是非英语文本(Koine希腊语),同义词更难允许,这一方面并不重要。
最好的方法是(1)检测这些类型的短语,然后(2)以一种在其他文本中不太死板的方式搜索它们(以便找到“钓鱼,甚至滑雪或徒步旅行”)?
发布于 2011-06-30 19:46:46
技术细节:对于词汇表,您有几种可能获得一个好的词汇表。不幸的是,我记不住名字了。其中之一是删除经常出现的单词。相反,你应该保留在很少的文本中出现的生词。然而,保存恰好出现在一个文本中的单词是没有用的。
对于邻接矩阵,邻接关系是通过计算您正在考虑的单词的距离来测量的(计算分隔它们的单词数量)。例如,让我们使用您的文本=)
比较风格的
One method就是寻找相似的短语。如果我在一本书“钓鱼,滑雪和徒步旅行”中发现了几次,而在另一本书“钓鱼,徒步旅行和滑雪”中,风格上的相似度指向了一个作者。我还需要能够找到“钓鱼,甚至滑雪或徒步旅行”。理想情况下,我也会找到“垂钓,徒步旅行和滑雪”,但因为它们是非英语文本(Koine 希腊语),同义词更难允许,这一方面并不重要。
这些完全是虚构的值:
A(方法,比较) += 1.0
A(方法,相似性) += 0.5
A(方法,希腊语) += 0.0
你主要需要一个“典型距离”。例如,你可以说,在20个分隔词之后,这些词就不能再被认为是相邻的。
在进行一些归一化之后,只需在两个文本的邻接矩阵之间建立一个L2距离,看看它们有多近。你可以在之后做一些更花哨的事情,但这应该会产生可接受的结果。现在,如果你有同义词,你可以很好地更新邻接关系。例如,如果你在输入中输入了“漂亮的女孩”,那么
一个(漂亮的,处女的) += 1.0
A(华丽的,处女作) += 0.9
A(公平,处女) += 0.8
A(sublime,maiden) += 0.8
..。
发布于 2011-06-30 19:42:14
您可能应该使用一些字符串相似性度量,如Jaccard、Dice或cosine similarity。您可以在单词、(单词或字符级别)n-gram或词条上尝试这些方法。(对于像Koinè希腊语这样词形变化很大的语言,如果你有一个很好的词法分析器,我建议你使用词法。)
捕获同义词是很困难的,除非您有像WordNet这样的东西,它可以将同义词映射在一起。
发布于 2011-06-30 20:08:12
我会遵循两条准则:
匹配算法中过早优化的
fishing.非常接近的是angling
作为一名自学AI,我会使用(至少在一开始)神经网络。有一个简单且完整的示例(用python编写)可以在中找到,它的目标正是“数据挖掘”。当然,您可能希望在其他语言中实现。
关于你的两个具体问题:
检测这类短语的最佳方法是什么
你的问题的其他答案已经详细说明了这一点(他们的作者似乎比我在这个问题上知道得更多!),但再说一遍:我会从简单的开始,简单地使用一个神经网络来告诉你两个词有多接近。然后,我会继续进行"waves“优化(例如,如果它是一个英文文本-只使用单词的词根,或者可能对根据文本的其他元数据调整分数有一些用处,比如年份、作者或地理来源,或者完全改变匹配算法……)直到你对结果满意为止。
以一种在其他文本中不太死板的方式搜索它们的最佳方式是什么(以便找到“钓鱼,甚至滑雪或徒步旅行”
我会说,这相当于要求AI返回其“接近度分数”超过给定阈值的所有短语。
哈!
https://stackoverflow.com/questions/6534030
复制相似问题