python - 使用特定单词列表将单词更改为数字的最佳方法

标签 python regex sed awk

我有一个文本文件,每行包含推文,需要针对机器学习格式进行更改。我使用 python 和基本的 unix 文本操作 (regex) 来实现我的很多字符串操作,并且我开始使用 sed、grep 和 pythons .re 函数....然而,下一个问题对我来说是令人兴奋的,并且想知道是否任何人都可以帮助我。我尝试了一些谷歌搜索,但没有运气 :(

我总是从伪代码开始,这样对我来说更容易,这就是我想要的...... "将 -token1- OR -token2- OR -token3- OR -token4- 替换为整数 '1',将所有other 单词/标记替换为整数 '0' "

假设我的需要变为“1”的单词/标记列表如下:

  • :)
  • 快乐
  • 有趣

我的推文是这样的:

  • 这是有趣的一天 :)
  • 我觉得 python 很酷!这让我很开心

新程序/函数的输出将是:

  • 0 0 0 0 1 0 1
  • 0 0 0 1 0 0 0 1

注意 1:请注意“cool”有一个“!”在它后面,它也应该包括在内,尽管我总是可以先删除文件中的所有标点符号,以使其更容易

注意2:所有推文都将小写,我已经有一个将所有行更改为小写的函数

有谁知道如何使用 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

第 4 行的 or 用于处理 :),正如@EOL 所建议的。

还有一些情况不会被正确处理,比如用cool :), I like it。问题是需求固有的。

关于python - 使用特定单词列表将单词更改为数字的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755598/

相关文章:

python - 循环遍历文件并单独保存

python - message.content.startswith Discord.Py

regex - 使用 Notepad++ 双换行符

linux - 'sed -i' 和 'sed ... > file' 之间的区别

html - 使用 sed 加入 html 行

python - 'from pylons import config' 和 'import pylons.config' 之间的区别

python - 计算第一次出现和个体出现之间的差异(Python Pandas)

regex - 用 grep/sed 替换许多任意 Markdown 链接

python - 未找到打印搜索的问题

c++ - 通过从文件中读取来 boost 正则表达式匹配