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

Python 使用特定单词列表将单词转换为数字的最佳方法,python,regex,sed,awk,Python,Regex,Sed,Awk,我有一个文本文件,每行包含推文,需要修改为机器学习格式。我使用python和基本unix文本操作(regex)实现了很多字符串操作,我掌握了sed、grep和pythons.re函数的窍门……不过,下一个问题对我来说是Mindbrower,我想知道是否有人能帮我解决这个问题。我尝试了一些谷歌搜索,但没有成功:( 我总是从伪代码开始,让它对我来说更容易,这就是我想要的。。。 将-token1-或-token2-或-token3-或-token4-替换为整数“1”,将所有其他单词/标记替换为整数“0

我有一个文本文件,每行包含推文,需要修改为机器学习格式。我使用python和基本unix文本操作(regex)实现了很多字符串操作,我掌握了sed、grep和pythons.re函数的窍门……不过,下一个问题对我来说是Mindbrower,我想知道是否有人能帮我解决这个问题。我尝试了一些谷歌搜索,但没有成功:(

我总是从伪代码开始,让它对我来说更容易,这就是我想要的。。。 将-token1-或-token2-或-token3-或-token4-替换为整数“1”,将所有其他单词/标记替换为整数“0”

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

  • :)
  • 高兴的
  • 乐趣
我的推文看起来是这样的:

  • 这是有趣的一天:)
  • 我觉得python很酷!这让我很高兴
新程序/功能的输出为:

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

注2:所有tweet都是小写的,我已经有了一个函数,可以将所有的行都改成小写

有人知道如何使用unix正则表达式(如sed、grep、awk)或者甚至知道如何在python中实现这一点吗?顺便说一句,这不是家庭作业,我正在做一个情绪分析程序,我正在做一点实验

thanx!:)

输出:

0 0 0 0 1 0 1
0 0 0 1 0 0 0 1
第4行中的
用于处理@EOL建议的
:)

仍然有一些情况无法正确处理,例如使用
cool:),我喜欢它。该问题是需求固有的。

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

如果您需要将其作为一个全正则表达式,那么可以在这里查看我的解决方案

这是最快的方法,但是可以使它更干净。我只想将打印与处理分开。
print(“.join”(“1”如果代币中的单词,则表示“0”表示tweet.split())
我注意到OP的示例将“
cool!
”视为匹配“
cool
”。我想你会想知道的。+1因为这是要走的路(除了
:)
),还有使用较少的
字符串。标点符号。然而,我同意J.F.塞巴斯蒂安的观点:阅读
str(int(…)
比他的
“1”如果…否则为“0”
,需要更多的心理训练,因此它不那么清晰,我不推荐。可以通过在测试中添加
:)
单词来处理
。这也会加快处理速度,因为最常见的情况下不需要去除标点符号。您希望这些0和1是怎样的?字符串还是整数数组?你不想根据单词的数量和某些单词/标记的相对强度来计算总数吗?我认为这个例子是不一致的。“
cool!
”不在列表中(但“
cool
”在列表中)。感叹号应该特别处理(如忽略)?这方面有什么规定?
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
[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