【发布时间】:2017-12-20 13:17:18
【问题描述】:
假设我有一个元组列表,top_n,是文本语料库中最常见的 n 最常见的二元组:
import nltk
from nltk import bigrams
from nltk import FreqDist
bi_grams = bigrams(text) # text is a list of strings (tokens)
fdistBigram = FreqDist(bi_grams)
n = 300
top_n= [list(t) for t in zip(*fdistBigram.most_common(n))][0]; top_n
>>> [('let', 'us'),
('us', 'know'),
('as', 'possible')
....
现在我想替换 top_n 中的二元组词集实例用它们的连接就位。例如,假设我们有一个新变量query,它是一个字符串列表:
query = ['please','let','us','know','as','soon','as','possible']
会变成
['please','letus', 'usknow', 'as', 'soon', 'aspossible']
在所需的操作之后。更明确地说,我想搜索 query 的每个元素并检查第 i 个和第 (i+1) 个元素是否在 top_n 中;如果是,则将 query[i] 和 query[i+1] 替换为单个连接的二元组,即 (query[i], query[i+1]) -> query[i] + query[i+1]。
有没有办法使用 NLTK 来做到这一点,或者如果需要循环遍历 query 中的每个单词,最好的方法是什么?
【问题讨论】:
-
我感觉你的输入有误,查询不是二元组列表。
-
如果没有,
[token_1+token_2 for token_1, token_2 in zip(query[:-1], [""]+query[2:])] -
不用等待,您的输出包括除第一个单词之外的其他单个单词。你到底想要什么,那不是串联的二元组列表:
-
为什么 8 个单词的查询返回一个只有 6 个单词的列表...?你是什么意思?你的标题似乎有点误导。