标签: text-normalization

JavaScript中的程序口音减少(又称文本规范化或不合理)

我需要将2个字符串比较为相等,如下所示:

吕贝克==吕贝克

在JavaScript中.

为什么?好吧,我有一个自动完成字段,使用Lucene进行Java服务,其中地名自然存储(如Lübeck),但也被索引为规范化文本,

import sun.text.Normalizer;
oDoc.setNameLC = Normalizer.normalize(oLocName, Normalizer.DECOMP, 0)
    .toLowerCase().replaceAll("[^\\p{ASCII}]","");
Run Code Online (Sandbox Code Playgroud)

这样一来,一个不知道输入"Mèxico"的人可以输入"墨西哥"并得到一个返回"Mèxico"的比赛(在很多其他可能的点击中,如"CaféMèxico,Dubai,UAE").

现在问题是我没有能力更改服务以在服务器端进行任何突出显示,因此我在客户端JavaScript方面突出显示如下内容:

return result.replace( input.replace(/[aeiou]/g,"."), "<b>$1</b>");
Run Code Online (Sandbox Code Playgroud)

这有点花哨,因为我在输入中转义了特殊的正则表达式字符.这对于点击开头的简单单词匹配很好,但是如果你突然希望支持像"london cafe"这样的多字匹配,它真的会崩溃:

input = input.strip().toLowerCase(); //fyi prototype's strip is like trim
re = new RegEx(input.replace(/[aeiou]/g,".").replace(/\s+/g,"|"),"gi");
return result.replace(re, "<b>$1</b>");
Run Code Online (Sandbox Code Playgroud)

这不适用于说"伦敦ca"(正在输入伦敦咖啡馆),因为它会将"Jack London Cabin,Dawson City,Canada"标记为:"Ja<b>ck</b> <b>London</b> <b>ca</b>bin, Dawson <b>Ci</b>ty, <b>Ca<b/>nada"[注意"ck"和"Ci"特别]

因此,我有点像寻找一些不那么疯狂的东西:

input = input.strip().toLowerCase();
input = input.replace(/a/g,"[ÀàÁáÂâÃãÄäÅ寿??????]");
input = input.replace(/e/g,"[ÈèÉéÊêËë??????????]");
// ditto for i, o, u, y, c, n, maybe also d, g, h, j, k, l, r, s, t, w, z 
re …
Run Code Online (Sandbox Code Playgroud)

javascript unicode normalization accent-insensitive text-normalization

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

如何正确实现Unicode密码?

添加对Unicode密码的支持,这是开发人员不应忽视的重要功能.

仍然,在密码中添加对Unicode的支持是一项棘手的工作,因为相同的文本可以在Unicode中以不同的方式编码,并且您不希望阻止人们因此而登录.

假设您将密码存储为UTF-8,并且请注意此问题与Unicode编码无关,而且与Unicode规范化有关.

现在的问题是你应该如何规范化 Unicode数据?

你必须确保你能够比较它.您需要确保在下一个Unicode标准发布时,它不会使您的密码验证无效.

注意:仍然有一些地方可能永远不会使用Unicode密码,但这个问题不是关于为什么或何时使用Unicode密码,而是关于如何以正确的方式实现它们.

第一次更新

是否可以在不使用ICU的情况下实现这一点,例如使用OS进行规范化?

passwords unicode normalization unicode-normalization text-normalization

8
推荐指数
1
解决办法
909
查看次数

哪种形式的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
查看次数

解决红宝石1.8.7中不同类型的utf连字符

我们在db中填充了不同类型的连字符/破折号(在某些文本中)。在将它们与某些用户输入的文本进行比较之前,我必须将任何类型的破折号/连字符标准化为简单的连字符/减号(ASCII 45)。

我们必须转换的破折号是:

Minus(?) U+2212 &minus; or &#x2212; or &#8722;
Hyphen-minus(-) U+002D &#45;
Hyphen(-) U+2010
Soft Hyphen   U+00AD  &shy;
Non-breaking hyphen  U+2011  &#8209
Figure dash(?)  U+2012 (8210) &#x2012; or &#8210;
En dash(–) U+2013 (8211) &ndash;, &#x2013; or &#8211;
Em dash(—) U+2014 (8212) &mdash;, &#x2014; or &#8212;
Horizontal bar(?) U+2015 (8213) &#x2015; or &#8213;
Run Code Online (Sandbox Code Playgroud)

这些都必须使用gsub转换为Hyphen-minus(-)。我使用了CharDet gem来检测获取的字符串的字符编码类型。它显示的是windows-1252。我已经尝试过Iconv将编码转换为ascii。但这会引发异常Iconv :: IllegalSequence

ruby -v => ruby​​ 1.8.7(2009-06-12 patchlevel 174)[i686-darwin9.8.0]
rails -v => Rails 2.3.5
mysql编码=>'latin1'

任何想法如何做到这一点?

ruby unicode ruby-on-rails hyphen text-normalization

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

GWT中的Unicode规范化

可能重复:
在GWT中用等效的"eace"替换éàçè...

是否有一些库可用于在gwt中进行unicode规范化操作?(从上下文来保证拉丁O等于西里尔O,例如)

unicode gwt normalization unicode-normalization text-normalization

5
推荐指数
0
解决办法
119
查看次数