【发布时间】:2009-12-15 07:59:42
【问题描述】:
我们正在对一系列英语文档(主要是科学文档)进行自然语言处理,但在通过各种组件传输非 ANSI 字符时遇到了问题。文档可以是“ASCII”、UNICODE、PDF 或 HTML。在这个阶段,我们无法预测我们的链中将包含哪些工具,或者它们是否允许使用 ANSI 以外的字符编码。即使以 UNICODE 表示的 ISO-Latin 字符也会出现问题(例如,在浏览器中显示不正确)。我们很可能会遇到一系列符号,包括数学符号和希腊符号。我们希望将这些“扁平化”为一个文本字符串,该字符串将在多步处理(包括 XML 和正则表达式工具)中幸存下来,然后可能在最后一步重新构建它(尽管它是语义而不是我们关心的排版,所以这是一个小问题)。
我很欣赏没有绝对的答案——在某些情况下,任何转义都可能发生冲突——但我正在寻找类似于 XML 的 <![CDATA[ ...]]> 的东西,它可以在大多数非递归 XML 操作中存活下来。 [ 这样的字符很糟糕,因为它们在正则表达式中很常见。所以我想知道是否有一种普遍采用的方法,而不是发明我们自己的方法。
一个典型的例子是“度”符号:
HTML Entity (decimal) °
HTML Entity (hex) °
HTML Entity (named) °
How to type in Microsoft Windows Alt +00B0
Alt 0176
Alt 248
UTF-8 (hex) 0xC2 0xB0 (c2b0)
UTF-8 (binary) 11000010:10110000
UTF-16 (hex) 0x00B0 (00b0)
UTF-16 (decimal) 176
UTF-32 (hex) 0x000000B0 (00b0)
UTF-32 (decimal) 176
C/C++/Java source code "\u00B0"
Python source code u"\u00B0"
我们也有可能遇到TeX
$10\,^{\circ}{\rm C}$
或
\degree
所以反斜杠、卷曲和美元不是一个好主意。
例如,我们可以使用如下标记:
__deg__
__#176__
这可能会奏效,但我会感谢那些有类似问题的人的建议。
更新我接受 @MichaelB 坚持我们始终使用 UTF-8。我担心我们的一些工具可能不符合要求,如果是这样,我会重新审视这一点。请注意,我最初的问题措辞不好 - 请阅读他的答案和其中的链接。
【问题讨论】:
-
如果您不提及任何架构或编程语言,很难对此发表评论。您打算如何存储文档?问题出在哪里?在您的内部架构中?在你的文件加载器中?
-
@xcut:我认为问题在于,当您在一般级别过滤和操作数据时,您没有明确定义的“标记”这些实体的方式,以防止它们不是由这些过滤器混合到管道中。在数据源附近,数据类型和转义是已知的,但在更一般的层面上,您需要一个非常通用、非常健壮的分隔符/标记来防止被非常通用的过滤器破坏。
-
@xcut @Stefano 的诊断是正确的。我们不知道这些会通过什么工具。例如,我们曾经使用 NLTK (Python) 工具包,现在已将其中的一部分切换到 Java (ANTLR)。下个月我们可能需要一些不同的东西。
标签: character-encoding escaping