Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何通过一次遍历来计算给定列表中的N对?_Python_Nlp - Fatal编程技术网

Python 如何通过一次遍历来计算给定列表中的N对?

Python 如何通过一次遍历来计算给定列表中的N对?,python,nlp,Python,Nlp,给出一个术语列表,如下所示: ['<s>', 'simon', 'is'. 'a', 'good', 'friend', '</s>', '<s>', 'simon', 'is', 'friend', '</s>'] 给我: counts = { '<s>': 2, 'simon': 2, 'is': 2, 'a': 1, 'good': 1, 'friend': 2, '</s>': 2 } 存储以前的N-1术语。元组

给出一个术语列表,如下所示:

['<s>', 'simon', 'is'. 'a', 'good', 'friend', '</s>', '<s>', 'simon', 'is', 'friend', '</s>']
给我:

counts = { '<s>': 2, 'simon': 2, 'is': 2, 'a': 1, 'good': 1, 'friend': 2, '</s>': 2 }

存储以前的N-1术语。元组可以是字典键。为什么包含但排除?我有一个基于维护长度为N的历史记录列表的工作代码,但在我发布它之前,您必须更接近它。我使用defaultdict(int)作为计数器。还可以将元组用作字典键。但我主要只是使用历史。附加(术语)并将其重置看起来不错。小结:你忘了你要忽略开始和结束前哨,并阻止元组跨越句子边界。如果你设置N=4或更多,一旦你用句子边界来限制它,你就会看到类似“friend”,“simon”,“friend”,“simon”这样的东西,这也限制了您为某个大型N构建的元组的大小。它可能只是数据集,也可能在循环中隐藏了一个低效的python操作(我检查了其中的一些,它们还可以),但是在您修复了这些细节之后,这个讨论更适合。
counts = { '<s>': 2, 'simon': 2, 'is': 2, 'a': 1, 'good': 1, 'friend': 2, '</s>': 2 }
counts2 = { ('<s>', 'simon'): 2, ('simon', 'is'): 2, ('is', 'a'): 1, ('a', 'good'): 1, ('good', 'friend'): 1, ('friend', '</s>'): 2, ('simon', 'friend'): 1 }
for i, term in enumerate(terms):
        _add(term, counts)
        if not term == '</s>': _add((term, terms[i+1]), counts2)
def build_counts(n):
for i, term in enumerate(terms):
    t = ()
    for j in range(i, n+i):
        if j == len(terms): break;
        t = t + (terms[j],)
        if not len(t) in counts: counts[len(t)] = {}
        _add(t, counts[len(t)])