从unix终端,我们可以diff file1 file2用来查找两个文件之间的区别.是否有类似的命令来显示2个文件的相似性?(必要时允许许多管道.
每个文件都包含一个带有字符串句子的行; 它们被排序并删除重复的行sort file1 | uniq.
file1:http://pastebin.com/taRcegVn
file2:http://pastebin.com/2fXeMrHQ
输出应输出两个文件中出现的行.
output:http://pastebin.com/FnjXFshs
我可以使用python这样做,但我认为放入终端有点太多了:
x = set([i.strip() for i in open('wn-rb.dic')])
y = set([i.strip() for i in open('wn-s.dic')])
z = x.intersection(y)
outfile = open('reverse-diff.out')
for i in z:
print>>outfile, i
Run Code Online (Sandbox Code Playgroud) 我有一个包含分类(名义和序数)和数字属性的数据集.我想使用这些混合属性在我的观察中计算(dis)相似性矩阵.使用R中集群包的daisy()函数,我可以很容易地获得如下的相异矩阵:
if(!require("cluster")) { install.packages("cluster"); require("cluster") }
data(flower)
as.matrix(daisy(flower, metric = "gower"))
Run Code Online (Sandbox Code Playgroud)
这使用gower度量来处理名义变量.是否有一个Python相当于daisy()R 中的函数?
或者也许任何其他模块函数允许使用Gower指标或类似的东西计算具有混合(名义,数字)属性的数据集的(dis)相似性矩阵?
我比较歌曲名称,用拉丁文字(但并不总是),我的目标是一种算法,给出了一个高分,如果两页首歌的标题似乎是相同的同题和非常低的分数,如果他们没有任何共同之处.
现在我已经不得不使用Lucene和RAMDirectory来编写代码(Java) - 但是使用Lucene只是为了比较两个字符串太重,因此太慢了.我现在转向使用https://github.com/nickmancol/simmetrics,它有许多很好的算法来比较两个字符串:
BlockDistance
ChapmanLengthDeviation
ChapmanMatchingSoundex
ChapmanMeanLength
ChapmanOrderedNameCompoundSimilarity
CosineSimilarity
DiceSimilarity
EuclideanDistance
InterfaceStringMetric
JaccardSimilarity
Jaro
JaroWinkler
Levenshtein
MatchingCoefficient
MongeElkan
NeedlemanWunch
OverlapCoefficient
QGramsDistance
SmithWaterman
SmithWatermanGotoh
SmithWatermanGotohWindowedAffine
Soundex
Run Code Online (Sandbox Code Playgroud)
但是我不熟悉这些算法,那将是一个不错的选择?
我认为Lucene以某种形式使用CosineSimilarity,所以这是我的出发点,但我认为可能有更好的东西.
具体来说,算法应该在短字符串上工作,并且应该理解单词的概念,即应该特别对待空格.拉丁文字的良好匹配是最重要的,但是韩文和中文等其他文字的良好匹配也是相关的,但我希望因为它们对待空间的方式需要不同的算法.
我正在建立一个网站,应该收集各种新闻源,并希望对文本进行相似性比较.我需要的是某种新闻文本相似度算法.我知道php具有similar_text函数,我不确定它有多好+我需要它用于javascript.因此,如果有人可以指出我的示例或插件或任何关于如何可能的指令或至少在哪里查看并开始调查.
问题: 一些R包用Levenshtein距离实现来计算两个字符串的相似性,例如http://finzi.psych.upenn.edu/R/library/RecordLinkage/html/strcmp.html.计算的距离可以很容易地对于弦长度进行归一化,例如通过将Levenshtein距离除以所涉及的最长弦的长度或者将其除以两个弦的长度的平均值.然而,对于语言学中的一些应用(例如方言学和接受多语言研究),建议将原始Levenshtein距离标准化为最长最小成本比对的长度(Heeringa,2004:130-132).从感性 - 语言学的角度来看,这往往会产生更有意义的距离测量.
示例: 德语字符串"tsYklUs"(Zyklus = cycle)可以7个插槽对齐转换为瑞典同源"sYkEl"(cyckel =(bi)循环),其中包含两个插入(I)和两个替换(S)总转化成本为4.标准化Levenshtein距离:4/7
(一个)
t--s--Y--k--l--U--s
---s--Y--k--E--l---
===================
I-----------S--S--I = 4
Run Code Online (Sandbox Code Playgroud)
也可以将8个插槽对齐的字符串转换为3个插入(I)和1个删除(D),总的对齐成本也是4.标准化的Levenshtein距离:4/8
(B)
t--s--Y--k-----l--U--S
---s--Y--k--E--l------
======================
I-----------D-----I--I = 4
Run Code Online (Sandbox Code Playgroud)
后者对准更有意义语言,因为它对准[1]彼此-phonemes而不是与[E]和[U]元音.
问题: 有没有人知道任何R函数可以让我将Levenshtein距离标准化为最长的最低成本比对而不是正确的字符串长度?感谢您的输入!
参考文献: WJ Heeringa(2004),使用Levenshtein距离测量方言发音差异.博士论文,格罗宁根大学.http://www.let.rug.nl/~heeringa/dialectology/thesis/
编辑 - 解决方案:我想我找到了一个解决方案.该adist函数可以返回对齐,并且似乎默认为最长的低成本对齐.举个例子,这里是与sykel和tsyklus相关的对齐方式:
> attr(adist("sykel", "tsyklus", counts = TRUE), "trafos")
[,1]
[1,] "IMMMDMII"
Run Code Online (Sandbox Code Playgroud)
为了计算Heeringa(2004)推荐的长度标准化距离,我们可以编写一个适度的函数:
normLev.fnc <- function(a, b) {
drop(adist(a, b) / nchar(attr(adist(a, b, counts = TRUE), "trafos")))
}
Run Code Online (Sandbox Code Playgroud)
对于上面的示例,这将返回
> normLev.fnc("sykel", "tsyklus")
[1] 0.5
Run Code Online (Sandbox Code Playgroud)
此函数还返回Heeringa(2004:131)示例的正确标准化距离:
> normLev.fnc("bine", "bEi")
[1] …Run Code Online (Sandbox Code Playgroud) 我有重复的条目非常相似,但不完全相同.这里有些例子:
- 2016: Obama's America
- 2016: Obama's America (VF)
- Hurt Locker
- The Hurt Locker
Run Code Online (Sandbox Code Playgroud)
什么是我可以用来获得潜在相似的查询titles?
更新:请注意,我不是要删除EXACT重复项.我只想在一列中选择类似的值.
我想计算从一组点到这些点的质心的多元距离.马哈拉诺比斯距离似乎适合这一点.但是,我收到一个错误(见下文).
任何人都可以告诉我为什么我会收到此错误,如果有办法解决它?
require(maptools)
occ <- readShapeSpatial('occurrences.shp')
load('envDat.Rdata')
#standardize the data to scale the variables
dat <- as.matrix(scale(dat))
centroid <- dat[1547,] #let's assume this is the centroid in this case
#Calculate multivariate distance from all points to centroid
mahalanobis(dat,center=centroid,cov=cov(dat))
Error in solve.default(cov, ...) :
system is computationally singular: reciprocal condition number = 9.50116e-19
Run Code Online (Sandbox Code Playgroud) 我想知道gensim word2vec的两个相似性度量之间的区别:most_similar()和most_similar_cosmul().我知道第一个使用单词向量的余弦相似性,而另一个使用Omer Levy和Yoav Goldberg提出的乘法组合目标.我想知道它对结果有何影响?哪一个给出语义相似性?等.例如:
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
model.most_similar(positive=['woman', 'king'], negative=['man'])
Run Code Online (Sandbox Code Playgroud)
结果:[('queen',0.50882536),...]
model.most_similar_cosmul(positive=['baghdad', 'england'], negative=['london'])
Run Code Online (Sandbox Code Playgroud)
结果:[(u'iraq',0.8488819003105164),...]
我按照文件在这里和代码在这里的两个文本数据集之间计算KLD(它使用的是对称KLD,并在第一环节提出了一种back-off模型来实现).我最后更改了for循环以返回两个数据集的概率分布,以测试两个总和为1:
import re, math, collections
def tokenize(_str):
stopwords = ['and', 'for', 'if', 'the', 'then', 'be', 'is', \
'are', 'will', 'in', 'it', 'to', 'that']
tokens = collections.defaultdict(lambda: 0.)
for m in re.finditer(r"(\w+)", _str, re.UNICODE):
m = m.group(1).lower()
if len(m) < 2: continue
if m in stopwords: continue
tokens[m] += 1
return tokens
#end of tokenize
def kldiv(_s, _t):
if (len(_s) == 0):
return 1e33
if (len(_t) == 0):
return 1e33
ssum = 0. + sum(_s.values())
slen = …Run Code Online (Sandbox Code Playgroud) django.contrib.postgres的新TrigramSimilarity功能非常适合我遇到的问题.我将它用于搜索栏以找到难以拼写的拉丁名字.问题是有超过200万个名字,搜索需要的时间比我想要的要长.
我想在postgres文档https://www.postgresql.org/docs/9.6/static/pgtrgm.html中创建一个关于三元组的索引.
但我不知道如何以Django API使用它的方式来做到这一点.对于postgres文本搜索,有关于如何创建索引的描述.但不是因为三元组的相似性. https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/search/#performance
这就是我现在所拥有的:
class NCBI_names(models.Model):
tax_id = models.ForeignKey(NCBI_nodes, on_delete=models.CASCADE, default = 0)
name_txt = models.CharField(max_length=255, default = '')
name_class = models.CharField(max_length=32, db_index=True, default = '')
class Meta:
indexes = [GinIndex(fields=['name_txt'])]
Run Code Online (Sandbox Code Playgroud)
然后在vieuw的get_queryset中我做:
class TaxonSearchListView(ListView):
#form_class=TaxonSearchForm
template_name='collectie/taxon_list.html'
paginate_by=20
model=NCBI_names
context_object_name = 'taxon_list'
def dispatch(self, request, *args, **kwargs):
query = request.GET.get('q')
if query:
try:
tax_id = self.model.objects.get(name_txt__iexact=query).tax_id.tax_id
return redirect('collectie:taxon_detail', tax_id)
except (self.model.DoesNotExist, self.model.MultipleObjectsReturned) as e:
return super(TaxonSearchListView, self).dispatch(request, *args, **kwargs)
else:
return super(TaxonSearchListView, self).dispatch(request, *args, **kwargs)
def get_queryset(self): …Run Code Online (Sandbox Code Playgroud)