【问题标题】:Speeding up Python Lemmatizer with 'for' Loop and 'if' Statements使用“for”循环和“if”语句加速 Python Lemmatizer
【发布时间】:2021-06-14 20:36:41
【问题描述】:

我使用此代码根据单词的邮资应用 Lemmatizer。

def lemmatize_all(sentence):
    wnl = WordNetLemmatizer()
    lem = []
    for word, tag in pos_tag(word_tokenize(sentence)):
        if tag.startswith("NN"):
            lem.append(wnl.lemmatize(word, pos='n'))
        elif tag.startswith('VB'):
            lem.append(wnl.lemmatize(word, pos='v'))
        elif tag.startswith('JJ'):
            lem.append(wnl.lemmatize(word, pos='a'))
        else:
            lem.append(word)
    return lem

问题是我拥有的数据越多,花费的时间就越长。请你帮我加速代码。

【问题讨论】:

    标签: python list for-loop if-statement


    【解决方案1】:

    我不确定这是否适合您,但它确实可以复制您的代码的行为并且可以轻松扩展。

    def lemmatize_all(sentence):
        wnl = WordNetLemmatizer()
        lem = []
    
        tags = {
            'NN': 'n',
            'VB': 'v',
            'JJ': 'a',
        }
    
        for word, tag in pos_tag(word_tokenize(sentence)):
            tag_start = tag[:2]
            if tag_start in tags:
                lem.append(wnl.lemmatize(word, pos=tags[tag_start]))
            else:
                lem.append(word)
        return lem
    

    通过这种方式,您可以创建一个将标签翻译成 pos 的字典。 或者如果标签比姿势多,也许这会派上用场:

    def lemmatize_all(sentence):
        wnl = WordNetLemmatizer()
        lem = []
    
        tags = {
            'n': ['NN','NA'],
            'v': ['VB','VA'],
            'a': ['JJ','JA'],
        }
    
        for word, tag in pos_tag(word_tokenize(sentence)):
            tag_start = tag[:2]
            if tag_start in  tags['n']:
                lem.append(wnl.lemmatize(word, pos='n'))
            elif tag_start in  tags['v']:
                lem.append(wnl.lemmatize(word, pos='v'))
            elif tag_start in  tags['a']:
                lem.append(wnl.lemmatize(word, pos='a'))
            else:
                lem.append(word)
        return lem
    

    我添加了以 NA、VA 和 JA 开头的标签来说明如何扩展代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多