2

したがって、ツイート/文字列内のすべてのユーザーの言及と URL を削除したいと考えています。

たとえば、次のようなツイートがあるとします。

@username1: some tweet here, http://www.url.com, aaaaa @username2

私はこのようなものを取得したい:

some tweet here, aaaaa

正規表現を使用したいのですが、Python は初めてで、その方法がわかりません。

また、ツイートは JSON ファイル (辞書のリスト) に保存され、各ツイート (辞書) には「entities」と呼ばれるキーがあり、「user_mentions」、「urls」、および「hashtags」に関する情報を次のような形式で保存します。以下:

{u'user_mentions': [{u'indices': [3, 18],
                     u'screen_name': u'username1',
                     u'id': 1234567,
                     u'name': u'user name 1',
                     u'id_str': u'1234567'},

                    {u'indices': [108, 116],
                     u'screen_name': u'username2',
                     u'id': 112233,
                     u'name': u'user name 2',
                     u'id_str': u'112233'}],

 u'hashtags': [],
 u'urls': [{u'url': u'http://www.url.com',
            u'indices': [83, 103],
            u'expanded_url': u'http://www.url.com',
            u'display_url': u'http://www.url.com'}]
}

ユーザーのメンションと URL を削除する方法を知っている人はいますか? 本当にありがとう!

4

5 に答える 5

12
from itertools import chain

result = []
for text, entries in ((t["text"], t["entries"]) for t in tweets):
    urls = (e["url"] for e in entries["urls"])
    users = ("@"+e["screen_name"] for e in entries["user_mentions"])
    text = reduce(lambda t,s: t.replace(s, ""), chain(urls, users), text)
    result.append(text)

または正規表現を使用します (末尾の空白以外の文字も削除します):

text = re.sub(r"(?:\@|https?\://)\S+", "", text)

または、2 つの方法の組み合わせ:

text = re.sub(r"(?:%s)\S*" % "|".join(map(re.escape, chain(urls, users))), "", text)
于 2012-12-15T22:04:39.550 に答える
2

最初の答えは、「エントリ」ではなく「エンティティ」と読むべきだと思います。また、メディアを除外しようとしている場合は、メディア内の URL も忘れないでください。

https://dev.twitter.com/overview/api/entities-in-twitter-objects

Python 3 の場合、メディア URL も削除します。

    from itertools import chain
    from functools import reduce

    result = []
    for text, entities in ((t["text"], t["entities"]) for t in user_timeline):
        urls = (e["url"] for e in entities["urls"])
        users = ("@" + e["screen_name"] for e in entities["user_mentions"])
        media_urls = ()
        if 'media' in entities:
            media_urls = (e["url"] for e in entities["media"])
        text = reduce(lambda t, s: t.replace(s, ""), chain(urls, media_urls, users), text)
        result.append(text)
于 2016-10-21T14:21:43.970 に答える
1

まず、ツイートにアクセスできることを願っています>>>

import json
import glob
for filename in glob.glob('*.json'):
with open("plain text - preprocess.txt",'a') as outfile ,open(filename, 'r') as f:
    for line in f:
        if line=='\n':
            pass
        else:
            tweet = json.loads(line) 
            ###NOW DO SOMETHING WITH tweet['text']

正規表現を使用して、ツイート内の不要な # または http リンクを削除します。私がやった方法はこちら>>>

import re
stringwithouthash = re.sub(r'#\w+ ?', '', tweet['text'])
stringwithoutlink = re.sub(r'http\S+', '', tweet['text'])

\S は、空白を除くすべての文字を取り込みます。

\w AZ,az,0-9 を入力

正規表現の詳細については、このリンクを参照してください。

于 2016-04-01T15:44:10.650 に答える
1
test = "@username1: some tweet here, http://www.url.com, aaaaa @username2"
import re
clean_text = re.sub(r'@\w+', '', text)

出力は次のようになります

: some tweet here, http://www.url.com, aaaaa
于 2021-05-29T11:05:17.800 に答える