Я пытаюсь извлечь твиты из огромного файла JSON, но мое регулярное выражение генерирует слишком много данных, и я не могу хоть убей понять, как его ограничить. Регулярное выражение находит то, для чего оно предназначено, но оно также помечает слишком много тегов.
Регулярное выражение, которое я использую, выглядит следующим образом (вероятно, более сложное, чем необходимо, но это не то, что меня интересует здесь):
(?:"contributors": .*?, "truncated": .*?, "text": ")([^R][^T].*?)"
Вот усеченная строка из файла JSON, которая генерирует слишком много данных, например:
{"contributors": null, "truncated": false, "text": "RT @BelloPromotions: Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica #musicanu\u2026", "is_quote_status": false, "in_reply_to_status_id": null, "id": 1099558111000506369, "favorite_count": 0, "entities": {"symbols": [], "user_mentions": [{"id": 943461023293542400, "indices": [3, 19], "id_str": "943461023293542400", "screen_name": "BelloPromotions", "name": "Bello Promotions \ud83d\udcc8\ud83d\udcb0"}, {"id": 729572008909000704, "indices": [60, 71], "id_str": "729572008909000704", "screen_name": "MykeTowers", "name": "Towers Myke"}, {"id": 775866464, "indices": [92, 99], "id_str": "775866464", "screen_name": "mariah", "name": "Kenzie peretti"}], "hashtags": [{"indices": [72, 83], "text": "myketowers"}, {"indices": [84, 91], "text": "mariah"}, {"indices": [100, 114], "text": "Desaparecemos"}, {"indices": [115, 121], "text": "music"}, {"indices": [122, 129], "text": "musica"}], "urls": []}, "retweeted": false, "coordinates": null, "source": "Music Twr Suggesting", "in_reply_to_screen_name": null, "in_reply_to_user_id": null, "retweet_count": 18, "id_str": "1099558111000506369", "favorited": false, "retweeted_status": {"contributors": null, "truncated": true, "text": "Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica\u2026 [link]", .......
В приведенном выше примере мое регулярное выражение выводит «myketowers», а затем второй экземпляр твита (исходный твит — после «retweeted_status»). Мне нужен только твит.
Вот код Python, который я запускаю (он не выдает никаких ошибок и делает именно то, что я хочу, даже слишком):
import re
import codecs
err_occur = []
pattern = re.compile(r'(?:"contributors": .*?, "truncated": .*?, "text": ")([^R][^T].*?)"')
input_filename = 'music_fixed.json'
tweets = open("tweets_380k.txt", "w")
try:
with codecs.open ('music_fixed.json', encoding='utf8') as in_file:
for line in in_file:
matches = pattern.findall(line)
if matches:
for match in matches:
err_occur.append(match)
except FileNotFoundError:
print("Input file %r not found." % input_filename)
for tagged in err_occur:
tweets.write(str(tagged)+"\n")
Как объяснялось выше, ожидаемый результат регулярного выражения для опубликованной строки JSON:
Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica\u2026 [link]
В мой текстовый файл в конечном итоге записывается следующее:
myketowers
Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica\u2026 [link]
Подробнее здесь: https://stackoverflow.com/questions/577 ... ex-results
Как ограничить результаты регулярных выражений? ⇐ Python
Программы на Python
-
Anonymous
1763687755
Anonymous
Я пытаюсь извлечь твиты из огромного файла JSON, но мое регулярное выражение генерирует слишком много данных, и я не могу хоть убей понять, как его ограничить. Регулярное выражение находит то, для чего оно предназначено, но оно также помечает слишком много тегов.
Регулярное выражение, которое я использую, выглядит следующим образом (вероятно, более сложное, чем необходимо, но это не то, что меня интересует здесь):
(?:"contributors": .*?, "truncated": .*?, "text": ")([^R][^T].*?)"
Вот усеченная строка из файла JSON, которая генерирует слишком много данных, например:
{"contributors": null, "truncated": false, "text": "RT @BelloPromotions: Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica #musicanu\u2026", "is_quote_status": false, "in_reply_to_status_id": null, "id": 1099558111000506369, "favorite_count": 0, "entities": {"symbols": [], "user_mentions": [{"id": 943461023293542400, "indices": [3, 19], "id_str": "943461023293542400", "screen_name": "BelloPromotions", "name": "Bello Promotions \ud83d\udcc8\ud83d\udcb0"}, {"id": 729572008909000704, "indices": [60, 71], "id_str": "729572008909000704", "screen_name": "MykeTowers", "name": "Towers Myke"}, {"id": 775866464, "indices": [92, 99], "id_str": "775866464", "screen_name": "mariah", "name": "Kenzie peretti"}], "hashtags": [{"indices": [72, 83], "text": "myketowers"}, {"indices": [84, 91], "text": "mariah"}, {"indices": [100, 114], "text": "Desaparecemos"}, {"indices": [115, 121], "text": "music"}, {"indices": [122, 129], "text": "musica"}], "urls": []}, "retweeted": false, "coordinates": null, "source": "[url=\]Music Twr Suggesting[/url]", "in_reply_to_screen_name": null, "in_reply_to_user_id": null, "retweet_count": 18, "id_str": "1099558111000506369", "favorited": false, "retweeted_status": {"contributors": null, "truncated": true, "text": "Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica\u2026 [link]", .......
В приведенном выше примере мое регулярное выражение выводит «myketowers», а затем второй экземпляр твита (исходный твит — после «retweeted_status»). Мне нужен только твит.
Вот код Python, который я запускаю (он не выдает никаких ошибок и делает именно то, что я хочу, даже слишком):
import re
import codecs
err_occur = []
pattern = re.compile(r'(?:"contributors": .*?, "truncated": .*?, "text": ")([^R][^T].*?)"')
input_filename = 'music_fixed.json'
tweets = open("tweets_380k.txt", "w")
try:
with codecs.open ('music_fixed.json', encoding='utf8') as in_file:
for line in in_file:
matches = pattern.findall(line)
if matches:
for match in matches:
err_occur.append(match)
except FileNotFoundError:
print("Input file %r not found." % input_filename)
for tagged in err_occur:
tweets.write(str(tagged)+"\n")
Как объяснялось выше, ожидаемый результат регулярного выражения для опубликованной строки JSON:
Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica\u2026 [link]
В мой текстовый файл в конечном итоге записывается следующее:
myketowers
Myke Towers Ft. Mariah - Desaparecemos\n@myketowers #myketowers #mariah @mariah #Desaparecemos #music #musica\u2026 [link]
Подробнее здесь: [url]https://stackoverflow.com/questions/57709819/how-to-limit-regex-results[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия