如何提取字符串中包含#字符的单词以统计话题标签使用次数
从文本中提取带#话题标签的实现方案
核心逻辑没有那么复杂,不管用什么技术栈,本质都是先拆分文本单元,再筛选符合特征的内容,根据你的运行环境选方案就行。
正则快速匹配方案(推荐,全语言通用)
直接用正则批量提取是效率最高的写法,不用手动处理拆分逻辑,常规英文/数字/下划线组成的hashtag,用匹配规则#\w+就能覆盖90%以上的场景:
- 会自动跳过零散出现在文本里、后面没跟有效内容的#符号
- 直接返回所有匹配到的hashtag列表,列表长度就是总出现次数
Python环境示例代码:
import re raw_text = "Final test for my EPQ analysis bot #EPQ #DataMining #HashtagTrack #EPQ" hashtag_list = re.findall(r'#\w+', raw_text) # 总使用次数直接取列表长度即可 total_count = len(hashtag_list) # 要做单标签频次统计,直接用Counter遍历计数就行 from collections import Counter tag_count = Counter(hashtag_list)
如果要兼容中文hashtag,把正则规则调整为#[\u4e00-\u9fa5\w]+就能正常匹配中文标签。
轻量拆分方案(适配无正则的运行环境)
如果你的部署环境不支持正则,按两步处理就行:
- 第一步:把整段文本按空白分隔符(空格、换行、制表符)拆成独立单词列表,绝大多数语言的字符串默认
split()方法不传参数就能完成这个操作 - 第二步:遍历单词列表,筛选出包含
#的单词即可,如果要严格匹配标准话题标签,把判断条件改成「单词以#开头」,能过滤掉#嵌在单词中间的异常情况
JavaScript环境示例代码:
const rawText = "Debugging the EPQ robot today #EPQ #DevLog #TextAnalysis"; const wordList = rawText.split(/\s+/); // 严格匹配#开头的标签 const hashtagList = wordList.filter(word => word.startsWith('#'));
统计注意事项
- 如果需要做大小写不敏感的统计,提取标签后统一转成小写/大写再计数,避免
#EPQ和#epq被识别成两个不同标签 - 如果文本里存在标点跟在标签末尾的情况(比如
#EPQ!、#DataAnalysis,),可以在筛选后额外做一步末尾标点裁剪,避免统计误差
内容的提问来源于stack exchange,提问作者Spectrum
相关产品推荐
相关产品推荐

