【问题标题】:Extracting n-grams of 3 contiguous characters and words提取 3 个连续字符和单词的 n-gram
【发布时间】:2019-11-17 04:03:45
【问题描述】:

下面的函数(我在 Chris van den Bergthis 博客文章中找到)提取字符串中 3 个连续字符的所有 n-gram:

import re

def ngrams(string, n = 3):
    string = re.sub(r'[,-./]|\sBD', r'', string)
    ngrams = zip(*[string[i:] for i in range(n)])
    return [''.join(ngram) for ngram in ngrams]

例如,将字符串Stack Overflow 传递给上面定义的函数将返回以下列表:

print(ngrams('Stack Overflow', n = 3))

['Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']

我的目标是修改此函数,使其包含 3 个连续字符 单词的 n-gram。也就是说,对于上面显示的相同示例,我希望输出如下:

['Stack', 'Overflow', 'Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']

【问题讨论】:

    标签: python nlp n-gram


    【解决方案1】:

    你可以这样做:

    import re
    
    def ngrams(string, n = 3):
        string = re.sub(r'[,-./]|\sBD', r'', string)
        ngrams = zip(*[string[i:] for i in range(n)])
        return string.split(' ') + [''.join(ngram) for ngram in ngrams]
    
    print(ngrams('Stack Overflow', n = 3))
    

    这给了你:

    ['Stack', 'Overflow', 'Sta', 'tac', 'ack', 'ck ', 'k O', ' Ov', 'Ove', 'ver', 'erf', 'rfl', 'flo', 'low']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多