我在python中使用词云生成器解析单词。生成器是用python 2编写的,但是我在Anaconda中运行。一些文本通过发电机运行起来" don"而不是"不要"以及常见的收缩结局,如" ll"或者"重新。"我不想把这些文件放到一个停用词文件中,而是要包括像" don&#t;#34;如果它们在文本中出现频率很高。已经存在的代码是这样的:
regexp = self.regexp if self.regexp is not None else r"\w[\w']+"
考虑包括抄袭,我试图用这个替换它:
regexp = self.regexp if self.regexp is not None else r"(?u)\b\w[a-zA-Z0-9_']+\b"
我正在进行的测试文本是Project Gutenberg的爱丽丝梦游仙境,其所有与项目相关的文本和许可都被剥夺了。收缩仍然在输出文件中显示为" don"和" ll"最常见的词汇。我使用find检查了文本文件,并没有看到任何损坏的单词作为错误的来源。我也使用Moby Dick获得了类似的结果。
有什么建议吗?
这是一个产生" ll"并且"不会"当用" r" \ w [\ w'] +""在正则表达式:
‘Well!’ thought Alice to herself, ‘after such a fall as this, I shall
think nothing of tumbling down stairs! How brave they’ll all think me at
home! Why, I wouldn’t say anything about it, even if I fell off the top
of the house!’ (Which was very likely true.)
Down, down, down. There was nothing else to do, so Alice soon began
talking again. ‘Dinah’ll miss me very much to-night, I should think!’
感谢下面的Matteo,我使用的解决方案是:
regexp = self.regexp if self.regexp is not None else r"(?u)\b\w[a-zA-Z0-9_'’]+\b"
答案 0 :(得分:0)
在你的正则表达式中,你正在寻找一个直的撇号('
,U + 0027),但原文使用’
(U + 2019,一个"右单引号&# 34)。您必须相应地调整您的正则表达式。
顺便说一句,鉴于现在你开始必须匹配"复杂" Unicode字符(特别是不适合UTF-8中单个字节的字符)您可能希望确保在Python 2中使用正确的unicode字符串(unicode
,{{1在Python 3)中避免意外。