龙空技术网

N-Gram 分词算法 Python 实现

聪明的程序员小苏 108

前言:

现在同学们对“python分词方法”大体比较讲究,同学们都想要了解一些“python分词方法”的相关内容。那么小编在网上收集了一些对于“python分词方法””的相关内容,希望看官们能喜欢,你们一起来了解一下吧!

N-Gram 分词算法 Python 实现

我们前面简单介绍了n-gram分词算法的基本概念,今天我们就来聊聊它怎么用代码去实现和使用。

我们可以利用N-gram来预估一个句子是否合理。

N-gram算法具体过程

过滤掉文本数据中的标点符合和其他特殊字符。

对所有的单词执行小写转换,并删除单词之间的空格,换行符等标志位。

使用长度为N的窗口对文本内容执行字符级滑动取词,将结果存入有序列表。

所以程序分为两步:

第一步:文本过滤。

第二步:滑动取词。

文本过滤

我们使用python实现。

def text_filter(text: str) -> str:    """    文本过滤器:过滤掉文本数据中的标点符合和其他特殊字符    :param text:待过滤掉文本    :return: 过滤后的文本    """    result = str()    for t in text:        if t.isalnum():            if t.isalpha():                t = t.lower()            result += str(t)    return result
滑动取词
def slide_words(text: str, l: int = 5) -> list:    """    滑动取词器    Input: text='abcd', l=2    Output: ['ab', 'bc', 'cd']    :param text:过滤后的文本(只包含小写数字/字母)    :param l:滑动窗口长度,默认为5    : returns:    """    tf = text_filter(text)    result = list()    if len(tf) <= l:        result.append(tf)        return result    for i in range(len(tf)):        word = tf[i:i + l]        if len(word) < l:            break        result.append(word)    return result
测试
if __name__ == '__main__':    banner = 'abcdefghigkLMNOPQRSTUVWXYZabcdefgh \r\n\r\n)021'    print(slide_words(banner))
运行结果
['abcde', 'bcdef', 'cdefg', 'defgh', 'efghi', 'fghig', 'ghigk', 'higkl', 'igklm', 'gklmn', 'klmno', 'lmnop', 'mnopq', 'nopqr', 'opqrs', 'pqrst', 'qrstu', 'rstuv', 'stuvw', 'tuvwx', 'uvwxy', 'vwxyz', 'wxyza', 'xyzab', 'yzabc', 'zabcd', 'abcde', 'bcdef', 'cdefg', 'defgh', 'efgh0', 'fgh02', 'gh021']

标签: #python分词方法