• 【问题和解决《NLTK PYTHON》自然语言处理中文翻译版中的一处代码错误


        我也是一名NLP的新手,导师给了我们入门的学习资料,便是《Natural Language Processing with Python》的国内爱好者免费翻译的中文版。在中文版中,难免有一些小错误,大部分错误经过自己的稍微仔细研读可以改正过来。

        在这里发现了一处代码上的小错误,供大家分享。

    在11.3数据采集中的“处理濒危语言时特别注意事项”小节里面,有一处将辅音字母顺序规范化的代码。这段代码其实并不难理解。但是在中文版的翻译中,可能是由于排版者的不小心疏忽,造成了排版错误。

    在中文版的当中,这段代码是这样的:

    >>>mappings= [('ph', 'f'), ('ght', 't'), ('^kn', 'n'), ('qu', 'kw'),
    ... ('[aeiou]+', 'a'), (r'(.)\1', r'\1')]
    >>>def signature(word):
    ... for patt,repl in mappings:
    ... word= re.sub(patt, repl, word)
    ... pieces= re.findall('[âeiou]+', word)
    ... return ''.join(char for piecein pieces for charin sorted(piece))[:8]
    >>>signature('illefent')
    'lfnt'
    >>>signature('ebsekwieous')
    'bskws'
    >>>signature('nuculerr')
    'nclr'

    关注pieces=re.findall…这一行,发现a上面多了一个^符号,这里是不正确的。

    应该把这句代码写成pieces= re.findall('[^aeiou]+', word),学过正则表达式和读过这一段的读者们应该都知道为什么要这样改。

    完整的代码如下:

    >>> mappings = [('ph', 'f'), ('ght', 't'), ('^kn', 'n'), ('qu', 'kw'),
    ...             ('[aeiou]+', 'a'), (r'(.)\1', r'\1')]
    >>> def signature(word):
    ...     for patt, repl in mappings:
    ...         word = re.sub(patt, repl, word)
    ...     pieces = re.findall('[^aeiou]+', word)
    ...     return ''.join(char for piece in pieces for char in sorted(piece))[:8]
    >>> signature('illefent')
    'lfnt'
    >>> signature('ebsekwieous')
    'bskws'
    >>> signature('nuculerr')
    'nclr'

    再次感谢热心翻译作者为我们带来的入门经典作品!

  • 相关阅读:
    RAC SCAN漂移
    clickhouse通过uuid创建表
    oracle rac新增监听器
    oracle 19c ocr备份更改路径
    Svn与Git的区别,为什么使用git?
    SQL Server事务的回滚
    存储过程详解
    SQL Server 触发器
    Sql Prompt 10下载安装破解图文教程
    TFS对软件项目的简单管理
  • 原文地址:https://www.cnblogs.com/createMoMo/p/3087711.html
Copyright © 2020-2023  润新知