如何用正则表达式筛选出评论里的用户名,并将其替换成字符串"Username"

爬油管评论,做语义分析,评论中有@别人进行回复。但是这些用户名对语义分析没有用处。如何将他们用正则表达式筛选出来,然后替换成字符串“Username“

1.第一种情况回复是有@打头的

@Yu Yu 你只是一个游客,人家本身的生活习惯使5使為你改变

@Chen Vergil 人地只懂 北上返大陆 唔 懂北角 在哪里 哈哈哈

@梁侃 另,我们广东人认为广东以北都系北方

2.有的情况是:没有@字符,只有对方用户名,但大多这种情况,是英文的用户名:

Chiu Alice 怎么可以这样

Su Chung 香港街头乱七八糟

如何匹配?筛选出来,然后用“Username”替换掉

weixin_42167712
Chen Jr 是要识别出用户名,然后将其替换成Username,评论要保留。例子:“@Yu Yu 你只是一个游客,人家本身的生活习惯使5使為你改变” 变成“Username你只是一个游客,人家本身的生活习惯使5使為你改变”
6 个月之前 回复
weixin_42167712
Chen Jr 是要识别出用户名,然后将其替换成Username,评论要保留。例子:“@Yu Yu 你只是一个游客,人家本身的生活习惯使5使為你改变” 变成“Username你只是一个游客,人家本身的生活习惯使5使為你改变”
6 个月之前 回复
weixin_42167712
Chen Jr 是要识别出用户名,然后将其替换成Username,评论要保留。例子:
6 个月之前 回复

4个回答

你这个没法确定分出来的部分是否是完整的用户名吧,你的例子里@Yu Yu中间是包含空格的,中英文也都有,所以有可能把后面的正文也识别进来。
想确定得到的部分是不是用户名只能去用户数据库查有无这个用户名,而且这是不可能的,所以我觉得你没必要这么做。
具体怎么改善就得看你除了这个要求还有什么次要的要求了,我的想法是分出用户名后去爬一下主页,爬到了就按用户名处理并记录,但是没有at符号的就没办法了,只能看之前的记录里有没有存了。而且没有at符号的很难判断,比如“那个广东人是广东人”这句话里,你没法判断哪个广东人是用户名,那个是地区名,其他情况类似,所以针对处理第一种情况就好。
或者你看下用户名标识中间的空格是不是空格,还是特殊字符,因为网页肯定也要区分的,应该会有对应的标记,没有就没辙了。

@.+|[a-zA-Z\s]+
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复Chen Jr: 正则表达式只能根据你预先设计的规则匹配特定的文本,没办法具有“智能”,去分析语义。是不是用户名,你只能用一种规则来设定
6 个月之前 回复
weixin_42167712
Chen Jr 是要识别出用户名,然后将其替换成Username,评论要保留。例子:“@Yu Yu 你只是一个游客,人家本身的生活习惯使5使為你改变” 变成“Username你只是一个游客,人家本身的生活习惯使5使為你改变”
6 个月之前 回复
  1. 如果是通过网页,那么通常html里面会将这个用户通过标签包含起来。
  2. 如果是直接通过文字,这个是无法解析的,因为没有明显的分界符号。 所以推断,解析的使用情况大概率是前者。第一种情况就比较好处理了。 通过<tagname>.*?</tagname>,username。这种规则替换就可以。

看来楼主是赞同我必问中回答的要先获取用户名的做法。那我就再多说一点吧。
1,英文的可以通过正则表达式来匹配用户名。就是英文,空格都匹配出来,@可有可无
import re
name1 = re.match(r"@?([a-zA-Z\s]*)","@Yu Yu 你只是一个游客").group()

2,中文是没办法通过正则拿出人名的(不考虑人名与回答有空格,有这个方法也可以),通过分词的词性来识别人名,最简单的就是jieba 分词就可以解决了。
当然必问中我说的哈工大ltp 识别人名比jieba要精准一点。但如果你没用过,模型和安装包可能要花些时间。
import jieba.posseg as pseg
words =pseg.cut("梁侃 另,我们广东人认为广东以北都系北方")
for word,pseg in words:
if pseg=='nr':
print(word)

楼主的采纳是真看不懂了……

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐