给定一个字符串,例如i am a string.
我可以使用该包生成该字符串的 n 元语法nltk,其中 n 根据指定范围变化。
from nltk import ngrams
s = 'i am a string'
for n in range(1, 3):
for grams in ngrams(s.split(), n):
print(grams)
给出输出:
('i',)
('am',)
('a',)
('string',)
('i', 'am')
('am', 'a')
('a', 'string')
有没有办法使用生成的 ngram 的组合来“重建”原始字符串?或者,用下面评论者的话说,有没有一种方法可以将句子分成连续的单词序列,其中每个序列的最大长度为 k(在本例中 k 为 2)。
[('i'), ('am'), ('a'), ('string')]
[('i', 'am'), ('a'), ('string')]
[('i'), ('am', 'a'), ('string')]
[('i'), ('am'), ('a', 'string')]
[('i', 'am'), ('a', 'string')]
这个问题与这个问题类似,但又增加了一层复杂性。
工作解决方案- 改编自此处。
我有一个可行的解决方案,但对于较长的字符串来说它真的很慢。
def get_ngrams(s, min_=1, max_=4):
token_lst = []
for n in range(min_, max_):
for idx, grams in enumerate(ngrams(s.split(), n)):
token_lst.append(' '.join(grams))
return token_lst
def to_sum_k(s):
for len_ in range(1, len(s.split())+1):
for i in itertools.permutations(get_ngrams(s), r=len_):
if ' '.join(i) == s:
print(i)
to_sum_k('a b c')
温温酱
12345678_0001
相关分类