Ich wollte also viele japanische Sätze für maschinelles Lernen Ich habe beschlossen, viele Tweets auf der [Streaming API] von Twitter (https://dev.twitter.com/streaming/reference/get/statuses/sample) zu sammeln.
Selbst wenn ich es nicht selbst gesammelt hätte, wenn es eine Datei von jemandem gab, der irgendwo dasselbe tat, dachte ich, ich würde es verwenden, aber nachdem ich einige Minuten bei Google gesucht hatte, konnte ich nicht die richtige finden. Da es der Beginn des Schreibens im Jahr 2017 war, habe ich es selbst geschrieben.
Ich benutze eine Bibliothek namens Twython. (Früher habe ich Tweepy verwendet, aber anscheinend ist Twython heutzutage beliebter.)
Ich habe diese Tweets ausgeschlossen, weil ich dachte, sie wären nicht für die Verwendung als Korpusmaterial geeignet.
--LF begrenzt durch 1 Zeile 1 Tweet
Es ist im Format.
Auf diese Weise können Sie die Zeilenumbruchinformationen später belassen und die Handhabung über das Programm "1 Zeile 1 Tweet" vereinfachen.
Wenn Sie es so ausführen, wird es in die Standardausgabe ausgegeben.
In diesem Beispiel endet es, wenn Sie 10 gültige Tweets erhalten. (Sie können diese Nummer mit der Option -n
angeben.)
$ python tweetcorpus.py -n 10
Wenn Sie so schälen, können Sie den Fehler fast unbegrenzt fortsetzen, auch wenn unterwegs ein Fehler vorliegt. Sie können den Fortschritt visuell sehen, da Sie TTY mit "Tee" erhalten. Da gzip geleitet wird, ist es ein wenig sicher, eine große Anzahl von Tweets zu sammeln.
$ while true; do python -u tweetcorpus.py -n 500 | tee /dev/tty | gzip -cn >> tweet.gz ; sleep 1 ; done
(Informationen zur in ↑ verwendeten gzip-Kombination finden Sie unter Gzip-komprimierte Textdateien können mit cat verbunden werden)
(Informationen zur in ↑ verwendeten Python-Option -u
finden Sie unter Option zum Deaktivieren des stdout / stderr-Puffers in Python)
Persönlich bevorzuge ich den Stil, das Programm selbst zu vereinfachen und es mit Pipes zu verbinden, anstatt das gzip-Modul für jede Programmiersprache zu verwenden.
Das OAuth-Token für die Twitter-API wird aus den Umgebungsvariablen "APP_KEY", "APP_SECRET", "OAUTH_TOKEN", "OAUTH_TOKEN_SECRET" gelesen.
Erstellen Sie eine Anwendung auf Twitter Bereiten Sie die folgende Datei vor
.env
#!/bin/sh
export APP_KEY='XXXXXXXXXXXXX'
export APP_SECRET='XXXXXXXXXXXXXXXXXXXX'
export OAUTH_TOKEN='XXXXX-XXXXXXXXXX'
export OAUTH_TOKEN_SECRET='XXXXXXXXXX'
source ./.env
Lass es uns im Voraus lesen.
Wenn Sie eine Python-Umgebung haben, installieren Sie Twython und Sie können loslegen.
$ pip3 install twython==3.4.0
tweetcorpus.py
import argparse
import html
import os
import sys
from twython import TwythonStreamer
class CorpusStreamer(TwythonStreamer):
def __init__(self, *args,
max_corpus_tweets=100,
write_file=sys.stdout):
super().__init__(*args)
self.corpus_tweets = 0
self.max_corpus_tweets = max_corpus_tweets
self.write_file = write_file
def exit_when_corpus_tweets_exceeded(self):
if self.corpus_tweets >= self.max_corpus_tweets:
self.disconnect()
def write(self, text):
corpus_text = text.replace('\n', '\r')
self.write_file.write(corpus_text + '\n')
self.corpus_tweets += 1
def on_success(self, tweet):
if 'text' not in tweet:
#Andere als Tweet-Informationen ausschließen(Benachrichtigung etc.)
return
if 'retweeted_status' in tweet:
#Retweets ausschließen
return
if any(tweet['entities'].values()):
'''
tweet.entities.url
tweet.entities.media
tweet.entities.symbol
Schließen Sie Tweets aus, die Informationen enthalten, die nicht allein durch die Verarbeitung natürlicher Sprache verarbeitet werden können
'''
return
text = html.unescape(tweet['text'])
self.write(text)
self.exit_when_corpus_tweets_exceeded()
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-n', '--number-of-corpus-tweets',
type=int, default=100)
parser.add_argument('-o', '--outfile',
type=argparse.FileType('w', encoding='UTF-8'),
default=sys.stdout)
parser.add_argument('-l', '--language', type=str, default='ja')
app_key = os.environ['APP_KEY']
app_secret = os.environ['APP_SECRET']
oauth_token = os.environ['OAUTH_TOKEN']
oauth_token_secret = os.environ['OAUTH_TOKEN_SECRET']
args = parser.parse_args()
stream = CorpusStreamer(app_key, app_secret,
oauth_token, oauth_token_secret,
max_corpus_tweets=args.number_of_corpus_tweets,
write_file=args.outfile)
stream.statuses.sample(language=args.language)
if __name__ == '__main__':
main()
Ich habe es mit der neuesten Version von Python 3.6 versucht, aber ich denke, es wird funktionieren, wenn Twython auf 3 Serien installiert werden kann.
Python 3.6.0 (default, Dec 29 2016, 18:49:32) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
twython==3.4.0
Recommended Posts