WedX - журнал о программировании и компьютерных науках

Python: извлечь хэштеги из текстового файла

Итак, я написал код ниже, чтобы извлечь хэштеги, а также теги с «@», а затем добавить их в список и отсортировать в порядке убывания. Дело в том, что текст может быть не идеально отформатирован и не иметь пробелов между каждым отдельным хэштегом, и может возникнуть следующая проблема, поскольку это может быть проверено с помощью оператора #print внутри цикла for: #socality#thisismycommunity#themoderndayexplorer #modernoutdoors#mountaincultureelevated

Итак, метод .split() с ними не работает. Что было бы наилучшей практикой для решения этой проблемы?

Вот файл .txt

Благодарен за ваше время.

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, '')
05.02.2018

  • Если текст содержит только теги и профили, но плохо отформатирован, вы можете использовать регулярные выражения. Они очень хорошо подходят для таких задач 06.02.2018

Ответы:


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

Исходный текстовый файл содержит \r\n окончаний строк в стиле Windows, поэтому изначально у меня на Mac было много пустых «строк». Открытие текстового файла в универсальном режиме новой строки обеспечивает прозрачную обработку часть Python для чтения строк.

05.02.2018
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]