【问题标题】:Python: Extract hashtags out of a text filePython:从文本文件中提取主题标签
【发布时间】:2018-07-15 21:17:03
【问题描述】:

所以,我编写了下面的代码来提取主题标签和带有“@”的标签,然后将它们附加到列表中并按降序对它们进行排序。问题是文本的格式可能不完美,并且每个单独的主题标签之间没有空格,并且可能会出现以下问题 - 因为它可以使用 for 循环中的 #print 语句进行检查: #socality#thisismycommunity#themoderndayexplorer#modernoutdoors#mountaincultureelevated

所以,.split() 方法不处理这些。这个问题的最佳实践是什么?

Here is the .txt file

感谢您的宝贵时间。

name = input("Enter file:")
if len(name) < 1 : name = "tags.txt"
handle = open(name)
tags = dict()
lst = list()

for line in handle :
    hline = line.split()
    for word in hline:
        if word.startswith('@') : tags[word] = tags.get(word,0) + 1
        else :
            tags[word] = tags.get(word,0) + 1
        #print(word)

for k,v in tags.items() :
    tags_order = (v,k)
    lst.append(tags_order)

lst = sorted(lst, reverse=True)[:34]
print('Final Dictionary: ' , '\n')
for v,k in lst :
    print(k , v, '')

【问题讨论】:

  • 如果文本仅包含标签和配置文件但格式不正确,您可以使用正则表达式。它们非常适合此类任务

标签: python hashtag


【解决方案1】:

使用正则表达式。只有几个限制;标签必须以#@ 开头,并且不能包含任何空格或其他空白字符。

这段代码

import re
tags = []
with open('../Downloads/tags.txt','Ur') as file:
    for line in f.readline():
        tags += re.findall(r'[#@][^\s#@]+', line)

创建文件中所有标签的列表。您可以轻松调整它以将找到的标签存储在您的字典中;与其直接将结果存储在tags 中,不如遍历它并随意处理每个项目。

正则表达式是由这两个自定义字符类构建的:

  • [#@] - 开头的单个字符 #@
  • [^\s#@]+ - 不是 任何单个空格字符的序列(\s 匹配所有空格,例如空格、制表符和回车符)、#@;至少一个,并且尽可能多。

所以findall 从任何标签的开头开始匹配,然后尽可能多地抓取,只有在遇到任何“非”字符时才停止。

findall 返回一个匹配项的列表,您可以立即将其添加到现有列表中,或者依次遍历找到的项:

for tag in re.findall(r'[#@][^\s#@]+', line):
    # process "tag" any way you want here

源文本文件包含 Windows 样式的 \r\n 行结尾,所以我最初在我的 Mac 上得到了很多空“行”。在Universal newline mode 中打开文本文件可确保由 Python 的行读取部分透明地处理。

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多