我有一个文本文件,其中包含每行的推文,需要针对机器学习格式进行更改。我使用python和基本的unix文本操作(正则表达式)实现了很多我的字符串操作,并且我开始使用sed,grep和pythons .re函数....这个下一个问题然而对我来说是心灵冒犯,并且想知道是否任何人都可以帮助我。我尝试了一些谷歌搜索,但没有运气:(
我总是从伪代码开始,让我更容易,这就是我想要的...... “将-token1-OR -token2-OR -token3-OR -token4-替换为整数'1',将所有其他单词/标记替换为整数'0'”< / p>
让我说我需要成为'1'的单词/代币列表如下:
我的推文看起来像这样:
新程序/功能的输出将是:
注意1:注意'酷'有一个'!'在它背后,它也应该被包括在内,虽然我总是可以首先删除文件中的所有标点符号,以便更容易
注2:所有推文都是小写的,我已经有一个将所有行改为小写的函数
有没有人知道如何使用unix正则表达式(如sed,grep,awk)甚至如何在python中执行此操作?顺便说一句,这不是家庭作业,我正在研究情绪分析程序并正在尝试一下。
感谢名单! :)
答案 0 :(得分:8)
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所建议的那样,第4行中的or
可以处理:)
。
仍然存在无法正确处理的情况,例如使用cool :), I like it
。问题是要求所固有的。
答案 1 :(得分:1)
在awk
:
awk '
NR==FNR {
a[$1];
next
}
{
gsub(/!/, "", $0) # This will ignore `!`. Other rules can be added.
for (i=1;i<=NF;i++) {
if ($i in a) {
printf "1 "
}
else {
printf "0 "
}
}
print ""
}' lookup tweets
gsub
行以处理特殊情况。)[jaypal:~/Temp] cat lookup
:)
cool
happy
fun
[jaypal:~/Temp] cat tweets
this has been a fun day :)
i find python cool! it makes me happy
[jaypal:~/Temp] awk '
NR==FNR {
a[$1];
next
}
{
gsub(/!/, "", $0)
for (i=1;i<=NF;i++) {
if ($i in a) {
printf "1 "
}
else {
printf "0 "
}
}
print ""
}' lookup tweets
0 0 0 0 1 0 1
0 0 0 1 0 0 0 1
答案 2 :(得分:0)
如果您需要全部正则表达式,那么请在此处查看我的解决方案 Changing lines of text into binary type pattern