【发布时间】:2015-03-23 15:22:49
【问题描述】:
我正在使用 sklearn 使用 tf-idf Vectorizer 对象进行一些 NLP 向量化。可以使用关键字“token_pattern”构造此对象。
我想避免使用主题标签 (#foobar)、数字(以及以数字开头的字符串,即 10mg)、任何以“RT”(转发)开头的行或“已删除推文”行。
另外,我想忽略unicode。
我想保留 URL(不是“http://”)并将它们标记为可能存在于其中的任何单词(仅 [A-Za-z]+)。
我对正则表达式有一些经验,但直到现在还不需要更复杂的模式。
以下是我对所有内容的尝试……这显然不是最好的调查方法,但它确实总结了我目前对 Regex 规则的看法。
注意:searn doc here 使用字符串上的 unicode 标志显示默认的“token_pattern”,我不明白为什么......也许是单独的问题。
pat2 = r"(?im)([A-Z]+)(?<!^@)([A-Z]+)(?<!^#)([A-Z]+)(?<!^(RT))([A-Z]+)(?<!^Deleted)(?<=^(http://))([A-Z]+)"
我的崩溃:
(?im) #Are flags for 'multi-line' and 'case insensitive'
([A-Z]+)(?<!^@) #A negative look back, match [A-Z]+ only if not preceded by 'starts with @'.
(?<=^(http://))([A-Z]+) #A positive look forward, match [A-Z]+ only if 'starts with "http://"' is present.
我觉得这不是一个优雅的解决方案,即使它被调整为工作......
TIA
更新: 原始数据示例:
如果有帮助,我正在使用 pandas 数据框来加载数据。我是 pandas 的新手,可能缺少一些基于 pandas 的解决方案。
从这些原始数据中,我只想要从文本和 URL 中提取的单词。 这个例子很糟糕...请进一步评论以帮助我更好地定义它...谢谢!
原始:
http://foxsportswisconsin.ning.com/profiles/blogs/simvastatin-20-mg-pas-cher-sur-internet-acheter-du-simvastatin-20
标记化:
[foxsportswisconsin, ning, com, profiles, blogs, simvastatin, mg, pas, cher, sur, internet, acheter, du, simvastatin]
【问题讨论】:
-
你能告诉我们你想要的推文解析吗?示例推文和示例令牌。这是 100% 不可行的方法。
-
@SlaterTyranus,我现在正在处理这个问题......我的输入是来自各种来源、博客、推文等的混合。最初,我制作了一个单独的方法来循环这些行,将它们分成单词,并对其进行正则表达式...但这也很混乱。
标签: regex machine-learning nlp scikit-learn tokenize