从推文中移除用户

-2 投票
2 回答
1204 浏览
提问于 2025-05-01 10:04

我有一个Python脚本,可以从推文中去掉“RT”这个标记和“#”这个标签。现在我想把用户名也去掉,也就是那些以“@”符号开头,后面跟着用户名,再后面跟着一个冒号的内容。我只想去掉这样的用户名。例如,如果推文是“@bugun: MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw”,我想去掉“@bugun:”,最终得到的结果应该是“MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw”。

这是我用来去掉推文中标签和RT标记的代码:

# coding:utf-8
import sys, re
x = open("test.txt", "r")
for line in x:
    z = lambda line: re.compile('\#').sub('', re.compile('RT @').sub('@', line, count=1).strip())
    print z(line)
    saveFile = open("test_result.txt", "a")
    saveFile.write(z(line))
    saveFile.write("\n")
    saveFile.close()
暂无标签

2 个回答

0

你需要做的就是找到合适的正则表达式。顺便说一下,我在你的例子中加了一个井号,并稍微修改了你的代码,以便也能去掉这个井号——我不确定这是否是你想要的效果。下面这个函数会去掉任何井号,以及在“RT @”后面跟着的用户名,还有后面跟着的“: ”。希望这能帮到你。

import sys, re

tweet_text = "RT @bugun: MHP’li Kemallettin Yılmaz #Hello Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw"

def transform_tweet(line):
    return re.compile('#\w+ ').sub('', re.compile('RT @\w+: ').sub('', line, count=1)).strip()

运行 transform_tweet(tweet_text),我得到了这个:

"MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw"
1

根据你给的例子:

"@bugun: MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw}"

这段代码(Python 3.4):

# coding:utf-8
import sys, re
x = open("test.txt", "r")
for line in x:
    z = lambda line: re.compile('\#').sub('', re.compile('^@\w+: ').sub('', line, count=1).strip())
    print (z(line))
    saveFile = open("test_result.txt", "a")
    saveFile.write(z(line))
    saveFile.write("\n")
    saveFile.close()

将会输出:

MHP’li Kemallettin Yılmaz Bank Asya'ya yapılan intihardır http://t.co/AKxMgMuuSs @bugun http://t.co/fyJbr098tw

撰写回答