python怎么对字符串进行分组_python – 对类似字符串进行分组

我正在尝试分析一堆搜索术语,这么多个人,他们并没有说太多.也就是说,我想对条款进行分组,因为我认为类似的术语应该具有相似的效果.例如,

Term Group

NBA Basketball 1

Basketball NBA 1

Basketball 1

Baseball 2

这是一个人为的例子,但希望它能解释我想要做的事情.那么,做我所描述的最好的方法是什么?我认为nltk可能会有这样的东西,但我对它几乎不熟悉.

谢谢

最佳答案 您需要对这些术语进行聚类,对于相似性度量,我建议在字符 – 克级别使用

Dice’s Coefficient.例如,将字符串分成两个字母的序列进行比较(term1 =“NB”,“BA”,“A”,“B”,“Ba”……).

nltk似乎提供了骰子作为nltk.metrics.association.BigramAssocMeasures.dice(),但它足够简单,以允许调整的方式实现.以下是如何比较角色而不是单词级别的这些字符串.

import sys, operator

def tokenize(s, glen):

g2 = set()

for i in xrange(len(s)-(glen-1)):

g2.add(s[i:i+glen])

return g2

def dice_grams(g1, g2): return (2.0*len(g1 & g2)) / (len(g1)+len(g2))

def dice(n, s1, s2): return dice_grams(tokenize(s1, n), tokenize(s2, n))

def main():

GRAM_LEN = 4

scores = {}

for i in xrange(1,len(sys.argv)):

for j in xrange(i+1, len(sys.argv)):

s1 = sys.argv[i]

s2 = sys.argv[j]

score = dice(GRAM_LEN, s1, s2)

scores[s1+":"+s2] = score

for item in sorted(scores.iteritems(), key=operator.itemgetter(1)):

print item

使用您的字符串运行此程序时,会产生以下相似性分数:

./dice.py "NBA Basketball" "Basketball NBA" "Basketball" "Baseball"

('NBA Basketball:Baseball', 0.125)

('Basketball NBA:Baseball', 0.125)

('Basketball:Baseball', 0.16666666666666666)

('NBA Basketball:Basketball NBA', 0.63636363636363635)

('NBA Basketball:Basketball', 0.77777777777777779)

('Basketball NBA:Basketball', 0.77777777777777779)

至少对于这个例子,篮球和棒球术语之间的界限应该足以将它们聚集成单独的组.或者,您可以使用阈值在代码中更直接地使用相似性分数.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值