问题标签 [text-normalization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
12921 浏览

javascript - JavaScript 中的程序化重音减少(又名文本规范化或非重音)

我需要比较两个字符串,例如:

吕贝克 == 吕贝克

在 JavaScript 中。

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

这样,不知道输入“Mèxico”的人可以输入“mexico”并获得返回“Mèxico”的匹配项(在许多其他可能的点击中,例如“CaféMèxico,迪拜,阿联酋”)。

现在的问题是我无法更改服务以在服务器端进行任何突出显示,因此我在客户端 JavaScript 端突出显示类似的内容:

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

这不适用于说“london ca”(正在输入 london cafe),因为它会将“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”]

因此,我正在寻找一些不像以下内容那么疯狂的东西:

是否有一个编译表我可以参考映射一系列字符,这些字符是另一个字符的重音版本到该字符,我不是指普通的 unicode 图表。如果是这样,我是否可以避免使用奇怪的、可能很慢的 RegEx 语句?

关于赏金:
在我开始赏金之前,有两个答案,一个是让我用 Ruby 来做,另一个MizzardX写的,它是我在问题中提出的基本形式的完成。现在不要误会我的意思,我真的很感激能像他那样完全解决问题,但我只是希望可能有另一种方法。到目前为止,似乎每个路过查看问题和答案的人都认为 MizzardX 可以很好地涵盖它,或者他们没有不同的方法。我会对不同的方法感兴趣,如果在赏金关闭之前它根本不可用,MizzardX 将赢得赏金(尽管在残酷的转折中,他的编辑使它成为社区 wiki 的答案,所以我不确定是否他会得到赏金的!)

0 投票
2 回答
1114 浏览

unicode - 如何正确实施 Unicode 密码?

添加对 Unicode 密码的支持是开发人员不应忽视的一项重要功能。

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

假设您将密码存储为 UTF-8,请注意这个问题与 Unicode encodings 无关,它与Unicode normalization有关。

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

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

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

第一次更新

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

0 投票
1 回答
2302 浏览

ruby-on-rails - 在 ruby​​ 1.8.7 中处理不同类型的 utf 连字符

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

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

这些都必须使用 gsub 转换为连字符减号(-)。我使用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 encoding => 'latin1'

知道如何做到这一点吗?

0 投票
1 回答
812 浏览

javascript - JS中的文本规范化

有没有办法在Javascript中将字符串转换为普通形式C ?我知道node.js 中的unorm,但我对浏览器内的 JS 很感兴趣,所以合理的标准浏览器 API 是可以的。

0 投票
0 回答
128 浏览

gwt - GWT 中的 Unicode 规范化

可能重复:
在 GWT 中将 éàçè... 替换为等效的“eace”

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

0 投票
2 回答
669 浏览

c# - 从异常换行符规范化文本文件?

我有几个文本文件,在我想规范化的文本之间有很多换行符,但是文本之间的换行符没有模式,例如:

所以我想改变换行符的数量大于 X 到 Y 的地方所以让我们说,当有 5 个连续的换行符时,它变成 2,10 变成 3。

我目前的问题是我不知道我应该如何确定我必须规范化哪些行。

我知道我可以使用拆分来计算新行,以及其他方法,例如验证行是否为空等......但也许有一个简单的正则表达式或更好的方法来解决这个问题?

0 投票
1 回答
1448 浏览

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

我已经阅读了很多关于 Unicode 的内容,但我仍然对规范化及其不同形式感到非常困惑。简而言之,我正在从事一个项目,该项目涉及从 PDF 文件中提取文本并执行一些语义文本分析。

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

我看到 python 的unicodedata.normalize函数提供了几种用于规范化 unicode 代码点的算法。有人可以解释一下:

  • NFC
  • NFKC
  • NFD
  • NFKD

我阅读了相关的维基百科文章,但对于我微弱的大脑来说,它太不透明了,无法理解。有人可以用简单的英语向我解释一下吗?

另外,您能否推荐一下最适合自然语言处理项目的规范化方法?

0 投票
0 回答
292 浏览

unicode - QWebView::findText 不适用于 Unicode 的组合变音符号

我正在使用QtWebKit( QWebView) 来显示文本,并且我想通过QWebView::findText.

问题是必须显示的文本包含所谓的 Unicode 的组合变音符号,尽管它们应该忽略这些“标记”(字符),但它们QWebView::findText()和 JavaScriptwindow.find()都不会忽略这些“标记”(字符)。

例如,如果文本中有一个单词“ti̇̀krăs”(“t”,“i”,Combining Dot Above,Combining Grave Accent,“k”,“r”,“a”,Combining Breve,“s”), findText() 在搜索查询“tikras”(“t”、“i”、“k”、“r”、“a”、“s”)时无法找到该词。

在这种情况下,其他基于 WebKit 的浏览器(Chrome、Safari)似乎可以正常工作。

对于这种情况,我能做些什么吗?

0 投票
1 回答
448 浏览

unicode - 字符集比较

我需要紧急帮助。我无法比较字符集字符串。写入数据库table1的字符串utf-8 charset看起来还是很奇怪: SADI 但是写入同一个数据库的table2的字符串SADI是正常的。每当我比较两者时,它都会给出错误的结果。

  1. 知道如何进行比较吗?(实际上比较应该给出真实的结果)

  2. 知道如何将 SADI 插入SADI数据库。

两者都有望成为解决方案。

0 投票
1 回答
261 浏览

parsing - Neo4j Cypher 中的字符串规范化 - 如何?

问题背景:中文单词由字符组成,字符本身就是单词。我有 3 个节点代表中文单词,每个节点的属性具有字符串值:节点(1):“a”节点(2):“b”节点(3):“ab”

问题1:使用Cypher从节点(3)开始,如何找到构成节点(3)字符串的节点(1)和(2)?

问题 2:如果还有一个节点 (4):“dabc”,我将如何找到不属于图形的所有长度为 1 的单词(“d”和“c”没有节点)?

我知道我可以明确地对这些节点之间的关系进行建模,但我想知道 Cypher 是否具有足够的表现力,可以在这里减轻我的负担。