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