我有几个非英文文本。我想对它们进行风格比较。
比较风格的一种方法是寻找类似的短语。如果我在一本书“钓鱼,滑雪和徒步旅行”中找到了几次,而在另一本书“钓鱼,徒步旅行和滑雪”中,风格的相似性指向一位作者。我还需要能够找到“钓鱼,甚至滑雪或徒步旅行”。理想情况下,我也会发现“钓鱼,徒步旅行和滑雪”,但因为它们是非英语文本(Koine Greek),同义词更难以允许,而这方面并不重要。
最好的方法是(1)去检测这些短语,然后(2)以一种在其他文本中不过分严格的方式搜索它们(以便找到“钓鱼甚至滑雪或徒步旅行” “)?
答案 0 :(得分:8)
技术细节: 对于词汇表,您有几种可能获得良好的词汇量。不幸的是,我记不起名字了。其中之一是删除经常出现的文字。相反,你应该保留少数文本中出现的罕见词。但是,保留在一个文本中完全存在的单词是没有用的。
对于邻接矩阵,通过计算您正在考虑的单词的距离(couting分隔它们的单词的数量)来测量邻接度。例如,让我们使用你的文本=)
比较风格的一个方法是寻找类似的短语。如果我在一本书“钓鱼,滑雪和远足”中找到了几次,而在另一本书“钓鱼,徒步旅行和滑雪”中找到了风格中的相似性指向一位作者。我还需要能够找到“钓鱼,甚至滑雪或徒步旅行”。理想情况下,我也会发现“钓鱼,徒步旅行和滑雪”,但因为它们是非英语文本(Koine 希腊语),同义词更难以允许,而这方面并不重要。
这些完全由值组成:
A(方法,比较)+ = 1.0
A(方法,相似性)+ = 0.5
A(方法,希腊语)+ = 0.0
你主要需要一个“典型距离”。例如,你可以说在20个分词之后,那些单词不能再被认为是相邻的。
经过一些归一化后,只需在两个文本的邻接矩阵之间建立一个L2距离,看它们有多接近。之后你可以做更好的东西,但这应该产生可接受的结果。现在,如果你有同义词,你可以很好地更新邻接。例如,如果您输入“美丽的少女”,那么
A(漂亮,少女)+ = 1.0
A(华丽,少女)+ = 0.9
A(公平,少女)+ = 0.8
A(崇高,处女)+ = 0.8
...
答案 1 :(得分:2)
您应该使用一些字符串相似性度量,例如Jaccard,Dice或cosine similarity。您可以在单词,(单词或字符级别) n -grams或lemmas上尝试这些。 (对于一种高度变化的语言,如Koinè希腊语,如果你有一个很好的变形器,我会建议使用lemmas。)
除非你有像WordNet那样将同义词映射在一起的东西,否则很难捕捉到同义词。
答案 2 :(得分:1)
我会遵循两条准则:
angling
与fishing
非常接近。作为自学AI,我会(至少一开始)使用神经网络。有一个简单而完整的示例(在python中)可以找到here并且精确定位“数据挖掘”。当然,您可能希望用其他语言实现。
关于您的两个具体问题:
检测这些短语的最佳方法是什么
你的问题的其他答案已经详细介绍了这个问题(他们的作者似乎比我在这个问题上知道得更多!),但是又一次:我会简单地开始使用神经网络来告诉你有多近两个词是。然后我将继续进行优化的“波浪”(例如 - 如果它是英文文本 - 仅使用单词的根,或者根据文本的其他元数据调整分数可能有一些用处,如年份,或作者,或地理来源,或完全改变匹配算法......),直到您对结果感到满意为止。
在其他文本中以过于严格的方式搜索它们的最佳方式是什么(以便找到“钓鱼甚至滑雪或徒步旅行”
我想说这相当于要求AI返回“邻近分数”超过给定阈值的所有短语。
HTH!