2011-08-22 77 views
3

我创建了一个基于'HTMLParser'的子类来提取html内容。每当我有性格裁判如解码html内容和HTMLParser

' ' '&' '–' '…' 

我想要的

' ' (space), '&', '-', '...', and so on. 

什么是一些简单的字符裁判的转化为自己的正确表示最好的办法他们的英国同行来替代它们?

我的文字是类似于:

Some text goes here&after that, 6:30 pm–8:45pm and maybe 
something like … 

我想将其转换为:

Some text goes here & after that, 6:30 pm-8:45pm and maybe 
something like ... 
+0

[在Python中将XML/HTML实体转换为Unicode字符串](http://stackoverflow.com/questions/57708/convert-xml-html-entities-into-unicode-string-in-python) – geoffspear

回答

9

你的问题有两个部分。简单的部分是解码HTML实体。要做到这一点最简单的方法是从HTMLParser模块抓住这个无证但长时间稳定的方法:

>>> HTMLParser.HTMLParser().unescape('a < é – …') 
u'a < é – …' 

第二部分,转换Unicode字符为ASCII真人秀,是棘手和也相当值得怀疑。我会尽量保留Unicode短划线“ - ”和类似的印刷细节,而不是将它们转换为简单的连字符和直引号等字符。除非您的应用程序根本无法处理非ASCII字符,否则您应该尽可能保持原样,以及所有其他Unicode字符。

U + 2013省略号字符的具体情况可能不同,因为它是一个'兼容性字符',仅包含在Unicode中,用于无损地往返于其他具有该功能的编码。最好你只要输入三个点,然后让字体的字形组合逻辑完全按照如何绘制它。

如果你想只需更换兼容字符(像这样的,明确的绷带,日本全角数字和其他古怪极少数),你可以试试您的字符串正火范式KC:

>>> unicodedata.normalize('NFKC', u'a < – …') 
u'a < é – ...' 

(注意,您可能希望保留的一些其他字符也是兼容性字符,包括'²'。)

下一步是将带有变音符号的字母变成纯字母,您可以通过正常化到NFKD,而他们删除所有具有“组合”字符的字符ss来自字符串。这会给你以前重音的拉丁字母明白的ASCII,尽管对于许多语言来说,这种方式在语言上是不正确的。如果这是你关心你可以直接编码为ASCII:

>>> unicodedata.normalize('NFKD', u'a < – …').encode('us-ascii', 'ignore') 
'a < e ...' 

任何进一步的你可能会做的必须是特设因为有折叠串到ASCII没有公认的标准。 Windows有一个实现,就像Lucene(ASCIIFoldingFilter)一样。结果是相当可变的。

+0

htmlparser提示对我很有帮助。谢谢! – iceanfire