标签: unicode-normalization

在Python 2.7中使用unicodedata.normalize

再一次,我对unicode问题非常困惑.我无法弄清楚如何成功使用unicodedata.normalize按预期转换非ASCII字符.例如,我想转换字符串

u"Cœur"
Run Code Online (Sandbox Code Playgroud)

u"Coeur"
Run Code Online (Sandbox Code Playgroud)

我很确定unicodedata.normalize是这样做的方法,但我不能让它工作.它只是保持字符串不变.

>>> s = u"Cœur"
>>> unicodedata.normalize('NFKD', s) == s
True
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python unicode normalization unicode-normalization python-2.7

7
推荐指数
2
解决办法
1万
查看次数

NFC 标准化边界是否也扩展了字素簇边界?

这个问题与文本编辑有关。假设您有一段标准化形式的NFC文本,以及一个指向文本中扩展字素簇边界的光标。您想在光标位置插入另一段文本,并确保生成的文本也在 NFC 中。您还希望将光标移动到紧跟在插入文本之后的第一个字素边界上。

现在,由于连接两个都在 NFC 中的字符串不一定会生成也在 NFC 中的字符串,因此您可能需要修改插入点周围的文本。例如,如果您有一个包含 4 个代码点的字符串,如下所示:

[0] LATIN SMALL LETTER B
[1] LATIN SMALL LETTER E
[2] COMBINING MACRON BELOW
--- Cursor location
[3] LATIN SMALL LETTER A
Run Code Online (Sandbox Code Playgroud)

并且您想{COMBINING ACUTE ACCENT, COMBINING DOT ABOVE}在光标位置插入一个 2-codepoints 字符串。那么结果将是:

[0] LATIN SMALL LETTER B
[1] LATIN SMALL LETTER E WITH ACUTE
[2] COMBINING MACRON BELOW
[3] COMBINING DOT ABOVE
--- Cursor location
[4] LATIN SMALL LETTER A
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:在插入字符串后,您如何确定应该将光标放置在哪个偏移量处,从而使光标在插入的字符串之后结束位于字素边界上?在这种特殊情况下,在标准化期间,光标位置后面的文本不可能与前面的文本交互。因此,以下示例 Python 代码将起作用:

import unicodedata

def …
Run Code Online (Sandbox Code Playgroud)

unicode unicode-normalization

7
推荐指数
1
解决办法
81
查看次数

更改数组Delphi中的特殊字符

我得到的一些字符串是UTF-8编码,并包含一些特殊字符,如Å¡,Ä',Ä等.我用StringReplace()它来转换为一些普通文本,但我只能转换一种字符.因为PHP还有一个替换字符串的功能,如下所示:如何用PHP中的特殊字符替换特殊字符?,但它支持数组:

<?php
  $vOriginalString = "¿Dónde está el niño que vive aquí? En el témpano o en el iglú. ÁFRICA, MÉXICO, ÍNDICE, CANCIÓN y NÚMERO.";

  $vSomeSpecialChars = array("á", "é", "í", "ó", "ú", "Á", "É", "Í", "Ó", "Ú", "ñ", "Ñ");
  $vReplacementChars = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U", "n", "N");

  $vReplacedString = str_replace($vSomeSpecialChars, $vReplacementChars, $vOriginalString);

  echo $vReplacedString; // outputs '¿Donde esta el nino que vive aqui? En el tempano o en el iglu. AFRICA, …
Run Code Online (Sandbox Code Playgroud)

arrays delphi unicode normalization unicode-normalization

6
推荐指数
2
解决办法
3690
查看次数

是UTF8内射映射?

我们编写一个C++应用程序,需要知道这个:

UTF8文本是否编码从字节到字符的内射映射,这意味着每个字符(字母...)只以一种方式编码?因此,例如字母'Ž'不能编码为3231和32119.

c c++ unicode utf-8 unicode-normalization

6
推荐指数
2
解决办法
427
查看次数

PHP 5.3找不到normalizer_normalize()

我试图使用PHP 5.3中引入的normalizer_normalize()函数(说文档),但我不能使用它:

$ php -r 'echo normalizer_normalize("tést");'
PHP Fatal error:  Call to undefined function normalizer_normalize()
in Command line code on line 1
Run Code Online (Sandbox Code Playgroud)

我检查了我的PHP版本,但它是5.3:

$ php --version
PHP 5.3.6 (cli) (built: Sep 12 2011 18:02:42)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么PHP找不到它?

php unicode normalization unicode-normalization php-5.3

6
推荐指数
1
解决办法
3439
查看次数

哪种形式的unicode规范化适合文本挖掘?

我一直在阅读关于Unicode的主题,但我仍然对规范化及其不同形式感到困惑.简而言之,我正在开展一个项目,涉及从PDF文件中提取文本并执行一些语义文本分析.

我已经设法使用一个简单的python脚本令人满意地提取文本,但现在我需要确保所有等效的正交字符串都有一个(并且只有一个)表示.例如,'fi'印刷结扎应该分解为'f'和'i'.

我看到python的unicodedata.normalize函数提供了几种算法来规范化unicode代码点.有人可以解释之间的区别:

  • NFC
  • NFKC
  • NFD
  • NFKD

我阅读了相关的维基百科文章,但对于我虚弱的大脑来说,它太不透明了.有人可以用简单的英语向我解释这个吗?

另外,您能否为最适合自然语言处理项目的规范化方法提出建议?

python unicode normalization unicode-normalization text-normalization

6
推荐指数
1
解决办法
1065
查看次数

兼容性正常形式的字符串是否已经处于相应的规范范式中?

我的测试告诉我,从Unicode 6.2开始,完全兼容性分解中的所有字符都具有NFD_Quick_Check = Yes属性.

这使我相信isNFKD(x)暗示isNFD(x),而isNFKC(x)暗示isNFC(x).

我的结论是否正确?稳定性怎么样?对于Unicode标准的未来版本,这些含义是否可以保证?

unicode normalization unicode-normalization

6
推荐指数
1
解决办法
239
查看次数

西里尔'С'和拉丁'C'的Unicode比较

我有一个混合使用unicode字符\ u0421,'С'和\ u0043,'C'的数据集.是否有某种unicode比较,认为这两个字符相同?到目前为止,我已经尝试了几种ICU整理,包括俄罗斯的整理.

unicode collation normalization unicode-normalization accent-insensitive

6
推荐指数
1
解决办法
708
查看次数

在红宝石和其他编程语言中,西里尔字符串Я̆Я̄Я̈返回长度2而不是1

在Ruby,Javascript和Java(其他我没试过)中,有西里尔字符Я̆Я̄Я̈长度2.当我尝试用这些字符检查字符串的长度时,我的输出值很差.

"??".mb_chars.length
#=> 2  #should be 1 (ruby on rails)

"??".length
#=> 2  #should be 1 (ruby, javascript)

"?".length
#=> 1  #correct (ruby, javascript)
Run Code Online (Sandbox Code Playgroud)

请注意,字符串以UTF-8编码,每个字符串都表现为单个字符.

我的问题是为什么会有这样的行为,如何在这些字符内正确获取字符串的长度?

ruby string ruby-on-rails utf-8 unicode-normalization

6
推荐指数
2
解决办法
123
查看次数

比较中文unicode字符串,当多个代码点是同一字符时?

我正在编写一些处理汉字的Java代码,但得到了一些意想不到的结果-应该相等的字符串却不是。这是令人反感的字符之一,表示“六个”(拼音:liù):?。该字符可以用以下两个代码点之一表示:

块中的F9D1:CJK兼容表意文字
516D块中:CJK统一表意文字

维基百科上有关于这些字符范围的页面,关于兼容性表意文字的简短部分确实提到了一些重复项,但列表中省略了该特定字符。

所以我想知道:

  1. 是否在某处有重复的unicode字符列表,以便在尝试比较字符串之前可以对其进行转换?
  2. 在处理CJK字符时这是正常现象吗,还是我做错了其他事?

unicode normalization cjk unicode-normalization

5
推荐指数
1
解决办法
890
查看次数