使用特定单词列表将单词转换为数字的最佳方法


问题内容

我有一个文本文件,其中每行包含推文,需要针对机器学习格式进行更改。我使用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。问题是需求所固有的。