使用特定单词列表将单词转换为数字的最佳方法
问题内容:
我有一个文本文件,其中每行包含推文,需要针对机器学习格式进行更改。我使用python和基本的unix文本操作(regex)实现了很多我的字符串操作,而我却陷入了sed,grep和pythons的陷阱。re函数…。但是,下一个问题对我来说是个麻烦,我想知道是否任何人都可以帮助我。我已经尝试了一些谷歌搜索,但没有运气:(
我总是从伪代码开始,以使其更容易使用,这就是我想要的…“ 用整数‘1’替换-
token1-或-token2-或-token3-或-token4-,并替换所有 其他 单词/标记整数为‘0’
“
假设我的单词/标记需要变为“ 1”的列表如下:
- :)
- 凉
- 快乐
- 好玩
我的推文如下:
- 这真是有趣的一天:)
- 我觉得python很酷!这让我开心
新程序/功能的输出为:
- 0 0 0 0 1 0 1
- 0 0 0 1 0 0 0 1
注意1:请注意“ cool”如何带有“!” 在它后面,它也应该包括在内,尽管我总是可以始终先删除文件中的所有标点符号,以使其更容易
注意2:所有tweet都将变为小写,我已经有一个将所有行都变为小写的函数
有谁知道如何使用unix正则表达式(例如sed,grep,awk)或什至在python中做到这一点?顺便说一句,这不是家庭作业,我正在研究情绪分析程序,正在做一些试验。
谢谢!:)
问题答案:
from string import punctuation as pnc
tokens = {':)', 'cool', 'happy', 'fun'}
tweets = ['this has been a fun day :)', 'i find python cool! it makes me happy']
for tweet in tweets:
s = [(word in tokens or word.strip(pnc) in tokens) for word in tweet.split()]
print(' '.join('1' if t else '0' for t in s))
输出:
0 0 0 0 1 0 1
0 0 0 1 0 0 0 1
如@EOL所示,or
第四行中的可以处理:)
。
仍然存在无法正确处理的情况,例如使用cool :), I like it
。问题是需求所固有的。