Python 从文本文件创建单字符和双字符n-gram
我希望我的代码能够将文本文件拆分为单字符和双字符n-gram。例如,如果出现“dogs”这个词,我会想要“do”、“og”和“gs”。问题是我似乎只能把这篇文章分成几个字 我尝试只使用一个简单的split(),但对于重叠的n-gram似乎不起作用Python 从文本文件创建单字符和双字符n-gram,python,Python,我希望我的代码能够将文本文件拆分为单字符和双字符n-gram。例如,如果出现“dogs”这个词,我会想要“do”、“og”和“gs”。问题是我似乎只能把这篇文章分成几个字 我尝试只使用一个简单的split(),但对于重叠的n-gram似乎不起作用 from collections import Counter from nltk.util import ngrams def ngram_dist(fname, n): with open(fname, 'r') as fp:
from collections import Counter
from nltk.util import ngrams
def ngram_dist(fname, n):
with open(fname, 'r') as fp:
for lines in fp:
for words in lines:
result = Counter(ngrams(fname.split(),n))
return result
这里有一个解决方案。它将空格计为字符,但如果需要,您可以将其删除
import re
def generate_ngrams(s, n):
# Convert to lowercases
s = s.lower()
# Replace all none alphanumeric characters with spaces
s = re.sub(r'[^a-zA-Z0-9\s]', ' ', s)
# Break sentence in the token, remove empty tokens
tokens = [token for token in s if token != ""]
# Use the zip function to help us generate n-grams
# Concatentate the tokens into ngrams and return
ngrams = zip(*[tokens[i:] for i in range(n)])
return ["".join(ngram) for ngram in ngrams]
print(generate_ngrams("My Dogs is sick", 2))
你想把每个单词分成n克吗?还是每句话?还是每个文件?通常,n-gram会将一个单词拆分成一个句子。这应该是有效的:
b=“dogs”;打印([b[i:i+2]表示范围内的i(len(b)-1)])
@lll不,这绝对不是重复的,它只要求字符n克的单词,这个要处理文件中的所有行。请不要仅仅依赖于一个问题的标题,它们通常需要更正。请不要发布,这是不允许的。你能把这些问题中的一个合并到另一个(粘贴你的代码和细节),然后关闭不需要的一个吗?