新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2019-4-9
- 最后登录
- 1970-1-1
|
感谢管理员置顶了我的帖子,这里贴出来用编辑距离的代码。希望对大家有帮助!
import codecs
import tqdm
def decode_line(line):
parts = line.strip().split(',')
return parts[4], parts[5], parts[7]
. 1point 3acres
words = list(map(decode_line, codecs.open(
'words.csv', encoding='utf-16').readlines()))
print(len(words))
def distance(a, b):
d = [[0]*(len(b)+1) for i in range(len(a)+1)]
for i in range(len(a)+1):
for j in range(len(b)+1):.
if i == 0 and j == 0:
d[i][j] = 0
elif i == 0:
d[i][j] = j
elif j == 0:
d[i][j] = i
elif a[i-1] == b[j-1]:
d[i][j] = min(d[i][j-1]+1, d[i-1][j]+1, d[i-1][j-1]). ----
else:
d[i][j] = min(d[i][j-1]+1, d[i-1][j]+1, d[i-1][j-1]+1)
return d[len(a)][len(b)]
def search(a):
d = [(distance(a, w[0]), w[0]) for w in words]
d = sorted(d, key=lambda x: x[0])
return d
with open('pairs.txt', 'w')as fout:
for a in words:
first = True
for b in words:
if a[0] >= b[0]:
continue
if distance(a[0], b[0]) / (len(a)+len(b)) < 0.3:
if first:
first = False. 1point3acres.com
fout.write('%s %s %s\n' % a)
fout.write('%s %s %s\n' % b)
if not first:
fout.write('\n')
fout.flush()
|
|