Python 从文本文件创建单字符和双字符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:

我希望我的代码能够将文本文件拆分为单字符和双字符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:
        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克的单词,这个要处理文件中的所有行。请不要仅仅依赖于一个问题的标题,它们通常需要更正。请不要发布,这是不允许的。你能把这些问题中的一个合并到另一个(粘贴你的代码和细节),然后关闭不需要的一个吗?