首先,我想说我是python中的新手.我试图计算许多单词列表的Levenshtein距离.直到现在我成功编写了一对单词的代码,但是我在列表中遇到了一些问题.我只是有两个列表,其中一个在另一个之下,就像这样:carlos stiv peter
我想使用Levenshtein距离进行相似性处理.somebady可以告诉我如何加载列表然后使用函数计算距离?
我会感激的!
这是我的代码只有两个字符串:
#!/usr/bin/env python
# -*- coding=utf-8 -*-
def lev_dist(source, target):
if source == target:
return 0
#words = open(test_file.txt,'r').read().split();
# Prepare matrix
slen, tlen = len(source), len(target)
dist = [[0 for i in range(tlen+1)] for x in range(slen+1)]
for i in xrange(slen+1):
dist[i][0] = i
for j in xrange(tlen+1):
dist[0][j] = j
# Counting distance
for i in xrange(slen):
for j in xrange(tlen):
cost = 0 if source[i] == target[j] else 1
dist[i+1][j+1] = min( …Run Code Online (Sandbox Code Playgroud) 我正在努力研究如何使用条件对多个列值进行分组:
以下是我的数据作为pandas数据帧的样子:
id trigger timestamp
1 started 2017-10-01 14:00:1
1 ended 2017-10-04 12:00:1
2 started 2017-10-02 10:00:1
1 started 2017-10-03 11:00:1
2 ended 2017-10-04 12:00:1
2 started 2017-10-05 15:00:1
1 ended 2017-10-05 16:00:1
2 ended 2017-10-05 17:00:1
Run Code Online (Sandbox Code Playgroud)
我的目标是找出按ID分组的日期之间的日/小时或分钟差异.
我的输出看起来应该更像这样(在hrs中的diff):
id trigger timestamp trigger timestamp diff
1 started 2017-10-01 14:00:1 ended 2017-10-04 12:00:1 70
1 started 2017-10-03 11:00:1 ended 2017-10-05 16:00:1 53
2 started 2017-10-02 10:00:1 ended 2017-10-04 12:00:1 26
2 started 2017-10-05 15:00:1 ended 2017-10-05 17:00:1 2
Run Code Online (Sandbox Code Playgroud)
我尝试了很多选择,但我不能提供最有效的解决方案.
这是我的代码,直到现在:
首先,我尝试将数据拆分为"已启动"和"已结束": …
我开始处理稀疏矩阵,所以我对这个主题并不十分精通.我的问题是,我从单词列表中得到一个简单的合并矩阵,只是一个二维共生矩阵,逐字逐字计算一个单词在同一个上下文中出现的次数.由于语料库不是很大,所以矩阵非常稀疏.我想将它转换为稀疏矩阵,以便能够更好地处理它,最后做一些矩阵乘法.这是我到目前为止所做的事情(只有第一部分,其余部分只是输出格式和清洁数据):
def matrix(from_corpus):
d = defaultdict(lambda : defaultdict(int))
heads = set()
trans = set()
for text in corpus:
d[text[0]][text[1]] += 1
heads.add(text[0])
trans.add(text[1])
return d,heads,trans
Run Code Online (Sandbox Code Playgroud)
我的想法是创建一个新功能:
def matrix_to_sparse(d):
A = sparse.lil_matrix(d)
Run Code Online (Sandbox Code Playgroud)
这有意义吗?然而,这不起作用,不知道我怎么没有获得稀疏矩阵的方式.我应该更好地使用numpy数组吗?什么是最好的方法来做到这一点.我想比较许多处理矩阵的方法.
如果有人能让我朝着这个方向前进,那就太好了.
我想从单词列表中创建一个由制表符分隔的单词对列表.我认为一个选项可能是创建一个带"范围"的矩阵,因为我想让所有的单词相互结合.我需要单词对列表进行进一步分析.
从单词列表:
mama
papa
sister
brother
Run Code Online (Sandbox Code Playgroud)
应该是输出
mama papa
sister brother
mama sister
papa sister
brother mama
Run Code Online (Sandbox Code Playgroud)
等等....
谁知道最好的方法是什么?
我一直在尝试使用与#887使用的方法相同的方法来训练模型,仅用于测试用例。我有一个问题,什么是训练语料库导入spacy的最佳格式?我有一个文本文件,其中包含要使用新实体进行标记的实体列表。让我解释一下我的情况,我遵循这样的update.training脚本:
nlp = spacy.load('en_core_web_md', entity=False, parser=False)
ner= EntityRecognizer(nlp.vocab, entity_types=['FINANCE'])
for itn in range(5):
random.shuffle(train_data)
for raw_text, entity_offsets in train_data:
doc = nlp.make_doc(raw_text)
gold = GoldParse(doc, entities=entity_offsets)
nlp.tagger(doc)
ner.update(doc, gold)
ner.model.end_training()
Run Code Online (Sandbox Code Playgroud)
我将训练数据添加为entity_offsets:
train_data = [
('Monetary contracts are financial instruments between parties', [(23, 44, 'FINANCE')])
]
Run Code Online (Sandbox Code Playgroud)
这对于一个示例和新的实体标签来说效果很好。显然,我希望能够添加多个示例。想法是创建一个带有标记语句的文本文件,问题是spacy需要什么样的格式来训练数据,我应该保留示例中的entity_offset(对于千个句子来说这将是非常繁琐的任务)还是有另一种方法准备文件,例如:
financial instruments FINANCE
contracts FINANCE
Product OBJ
of O
Microsoft ORG
etc ...
Run Code Online (Sandbox Code Playgroud)
以及如何使用上述方法在语料库中传递语料库?我必须使用新创建的模型还是可以将新实体添加到旧模型中,如何实现?
更新 我设法导入了包含训练数据的文件,该文件将被上述训练方法识别。该列表将如下所示:
Financial instruments can be real or virtual documents, 0 21 FINANCE
The number of units of the financial …Run Code Online (Sandbox Code Playgroud)