问题如下:
我有一个摘要,通常在20到50个单词之间,我想与其他相对类似的摘要进行比较。一般类别和摘要所指的地理位置已为人所知。
例如,如果来自同一地区的人们正在撰写有关建房的文章,我希望能够将这些摘要列出一定程度的确定性,即他们实际上是指建造房屋,而不是建造车库或后院游泳池。
目前,该数据集约有5万份文件,每天增加约200份文件。
首选语言是Python,PHP,C / C ++,Haskell或Erlang,无论哪个都可以完成工作。另外,如果您不介意,我想了解选择特定语言的原因。
答案 0 :(得分:4)
您可以尝试使用某些字符串相似性度量,例如Jaccard和Dice,但不是计算字符重叠,而是计算字重叠。例如,使用Python,您可以使用以下内容:
def word_overlap(a, b):
return [x for x in a if x in b]
def jaccard(a, b, overlap_fn=word_overlap):
"""
Jaccard coefficient (/\ represents intersection), given by :
Jaccard(A, B) = (A /\ B) / (|a|) + (|b|) - (A /\ B)
"""
c = overlap_fn(a, b)
return float(len(c)) / (len(a) + len(b) - len(c))
jaccard("Selling a beautiful house in California".split(), "Buying a beautiful crip in California".split())
答案 1 :(得分:4)
由于python中的集合本身有很好的支持,我们可以将JGs code修改为,
def jaccard(a, b):
"""
Jaccard coefficient (/\ represents intersection), given by :
Jaccard(A, B) = (A /\ B) / (|a|) + (|b|) - (A /\ B)
"""
c = a.intersection(b)
return float(len(c)) / (len(a) + len(b) - len(c))
jaccard(set("Selling a beautiful house in California"), set("Buying a beautiful crip in California"))
答案 2 :(得分:2)
您可以查看WEBSOM project。
即使他们的网站今年没有完全更新,但解决的问题非常相似。正如他们在10年前处理的数据类似于您的数据(以及更多),今天您几乎可以在手机上运行算法。
答案 3 :(得分:1)
没有特别的语言可供选择。你试图找到语义相似性。这是一个非常大的区域。您可能对本文感兴趣:
Corpus-based and Knowledge-based Measures of Text Semantic Similarity