问题

​ 你正在处理Unicode字符串,需要确保所有字符串在底层有相同的表示。

解决方案

​ 在Unicode中,某些字符能够用多个合法的编码表示。为了说明,考虑下面的这个列子:

s1='Spicy Jalape\u00f1o'
s2='Spicy Jalapen\u0303o'
print(s1) # ->Spicy Jalapeño
print(s2)   # ->Spicy Jalapeñoprint(len(s1))  # ->14
print(len(s2))  # ->15
print(s1==s2)   # ->False

​ 这里的文本Spicy Jalapeño使用了两种形式来显示。第一种使用整数字符“ñ”(U+00F1),第二种使用拉丁文字母“n”后面跟一个“~”的组合字符(U+0303)。

​ 在需要比较字符串的程度中使用字符的多种表示会产生问题。为了修正这个问题,你可以使用unicodedata模块先将文本标准化:

import unicodedatat1=unicodedata.normalize('NFC',s1)
t2=unicodedata.normalize('NFC',s2)
print(t1==t2) # ->True
print(ascii(t1))  # ->'Spicy Jalape\xf1o'
t3=unicodedata.normalize('NFD',s1)
t4=unicodedata.normalize('NFD',s2)
print(t3==t4)  # ->True

normalize()第一个参数指定字符串标准化的方式。NFC表示字符应该是整体组成(比如可能的话就使用单一的编码),而NFD表示字符应该分解为多个组合字符表示。

​ python同样支持扩展的标准化形式NFKC和NFKD,它们在处理某些字符的时候增加看额外的兼容特性。比如:

s='\ufb01'
print(s) #->fi
print(unicodedata.normalize('NFD',s))  # ->fi
print(unicodedata.normalize('NFKD',s))  # ->fi
print(unicodedata.normalize('NFKC',s))  # ->fi

讨论

​ 标准化对于任何需要以一致的方式处理Unicode文本的程序都是非常重要的。当处理来自用户输入的字符串而你很难去控制编码的时候尤其如此。

​ 在清理和过滤文本的时候字符的标准化也是很重要的。比如,假设你想清楚掉一些文本上面的变音符的时候(可能是为了搜索和匹配):

t1=unicodedata.normalize('NFD',s1)
print(''.join(c for c in t1 if not unicodedata.combining(c)))  # ->Spicy Jalapeno

​ 最后一个例子展示了unicodedata模块的另一个重要方面,也就是测试字符类的工具函数。combining()函数可以测试一个字符是否为和音字符。在这个模块中还有其他函数用于查找字符类别。测试是否为数字字符等等。

2.9Unicode 文本标准化相关推荐

  1. 中文停用词文档_使用Python中的NLTK和spaCy删除停用词与文本标准化

    译者 | VK 来源 | Analytics Vidhya [磐创AI 导读]:本文介绍了如何使用Python中的NLTK和spaCy删除停用词与文本标准化,欢迎大家转发.留言.想要更多电子杂志的机器 ...

  2. 《Python Cookbook 3rd》笔记(2.9):将Unicode文本标准化

    将 Unicode 文本标准化 问题 你正在处理 Unicode 字符串,需要确保所有字符串在底层有相同的表示. 解法 在 Unicode 中,某些字符能够用多个合法的编码表示.为了说明,考虑下面的这 ...

  3. [转载] 使用Python中的NLTK和spaCy删除停用词与文本标准化

    参考链接: Python | 用NLTK进行词干分析 概述 了解如何在Python中删除停用词与文本标准化,这些是自然语言处理的基本技术  探索不同的方法来删除停用词,以及讨论文本标准化技术,如词干化 ...

  4. 正则表达式 数字和小数点_《自然语言处理综论》第三版笔记(二)之正则表达式,文本标准化和编辑距离...

    概要 早期有一种叫ELIZA的自然语言处理系统能够与用户进行有限的对话交流.它的原理是通过模式匹配来识别词组,譬如"YOU are X",然后将其转换为合适的回答,如"W ...

  5. 使用Python中的NLTK和spaCy删除停用词与文本标准化

    概述 了解如何在Python中删除停用词与文本标准化,这些是自然语言处理的基本技术 探索不同的方法来删除停用词,以及讨论文本标准化技术,如词干化(stemming)和词形还原(lemmatizatio ...

  6. 文本标准化之去除重音符号

    文章目录 题目 代码 运行结果 题目 ''' Description: 文本标准化之去除重音符号 Autor: 365JHWZGo Date: 2021-12-15 16:58:15 LastEdit ...

  7. python字符串与文本处理技巧(2):大小写敏感搜索、最短匹配、多行匹配、Unicode标准化

    1. 字符串忽略大小写的搜索替换 re.findall(patter, string, flags=re.IGNORECASE) 当我们需要忽略字符串中的字母大小写进行模式搜索时可以采用如下方案: i ...

  8. NLP任务中的文本预处理步骤、工具和示例

    作者 | Viet Hoang Tran Duong 来源 | DeepHub IMBA 头图 | CSDN付费下载于视觉中国 数据是新的石油,文本是我们需要更深入钻探的油井.文本数据无处不在,在实际 ...

  9. 练手扎实基本功必备:非结构文本特征提取方法

    作者 | Dipanjan (DJ) Sarkar 编译 | ronghuaiyang 来源 | AI公园(ID:AI_Paradise) [导读]本文介绍了一些传统但是被验证是非常有用的,现在都还在 ...

  10. 独家 | NLP详细教程:手把手教你用ELMo模型提取文本特征(附代码论文)

    作者:PRATEEK JOSHI 翻译:韩国钧 校对:李  浩 本文约3500字,建议阅读15分钟. 本文将介绍ELMo的原理和它与传统词嵌入的区别,然后通过实践来展示其效果. 简介 我致力于研究自然 ...

最新文章

  1. 十二步创建你的第一个JavaScript库
  2. Ansible常用模块介绍及使用
  3. 不用计算实现 图片懒加载
  4. Configured broker.id 2 doesn‘t match stored broker.id 3 in meta.properties
  5. latex 小于_一份菜鸡的Latex课堂作业works--(ii)
  6. 前端学习(3278):循环 遍历
  7. JavaScript 一维数组、二维数组(某个属性)去重方法
  8. java基础循环 for 、switch 、while 、do while、
  9. 再看电商 - 黄若 摘录
  10. zendstudio php6.5,ZendStudio13.6配置composer.phar和中文镜像、如何更新php项目依赖组件方法...
  11. Excel2021 如何将左侧A列数据填B列空白处A列数据合并到B列
  12. 树状数组基础版解析+区间修改
  13. 玩家访问网站自动弹窗加QQ群方法以及详细代码
  14. 【XJOI】燃烧的远征
  15. 前端PDF文件转图片方法(你值得收藏)
  16. mysql中字符串拼接函数_MySQL 字符串连接CONCAT()函数
  17. 音乐播放器 —— C++
  18. 最完整的SSM框架搭建流程
  19. 计算机视觉方向就业怎么样?可以做什么?
  20. cento网络故障:Job for network.service failed because the control process exited with error code. See sy

热门文章

  1. 乌班图nginx访问php 变成下载
  2. 这篇python正则表达式颠覆你的人生观,详细到让你怀疑人生!
  3. PTA——21级数据结构与算法实验3——栈和队列(参考答案)
  4. win10修改本地密钥服务器,win10密钥服务器
  5. OCR识别新能源车牌的原理
  6. Java程序员必读书籍推荐
  7. [随记] 注释//TODO的作用
  8. Qt开发——图片缩放简述
  9. Juniper 防火墙JSRP高可用性HA(High Availability) chassis cluster双击冗余
  10. Java字节码魔法数字_Java的魔法:字节码