2016-11-26 6 views
-2

Ich arbeite an einem Code mit Python, um die Erwähnungen aus einem Tweet-Text zu extrahieren.Wie verwendet man Python, um die Erwähnungen zu extrahieren?

Der Parameter ist ein Tweet-Text. Diese Funktion sollte eine Liste mit allen Erwähnungen im Tweet in der Reihenfolge zurückgeben, in der sie im Tweet erscheinen. Jede Erwähnung in der zurückgegebenen Liste sollte die anfängliche Erwähnung Symbol entfernt haben, und die Liste sollte jede Erwähnung angetroffen enthalten - einschließlich Wiederholungen, wenn ein Benutzer mehr als einmal innerhalb eines tweet.Here sind zwei Beispiele erwähnt wird:

>>>extract_mentions('@AndreaTantaros- You are a true journalistic\ 
professional. I so agree with what you say. Keep up the great\ 
[email protected] ') 
['AndreaTantaros','RepJohnLewis'] 
>>>extract_mentions('@CPAC For all the closet #libertarians attending \ 
#CPAC2016 , I'll be there Thurs/Fri -- speaking Thurs. a.m. on the main\ 
stage. Look me up! @CPAC') 
['CPAC','CPAC'] 

Eine Erwähnung beginnt mit dem Symbol "@" und enthält alle alphanumerischen Zeichen bis zu einem Leerzeichen, Satzzeichen oder dem Ende eines Tweets.

Wie kann ich die Erwähnungen aus der Zeichenfolge extrahieren? Tut mir leid, ich habe noch nichts über Regex gelernt, gibt es noch andere Möglichkeiten?

Antwort

2

Verwendung regex:

import re 
input_string = '@AndreaTantaros- You are a true journalistic professional. I so agree with what you say. Keep up the great [email protected] ' 
result = re.findall("@([a-zA-Z0-9]{1,15})", input_string) 

Ausgang: ['AndreaTantaros', 'RepJohnLewis']

Wenn Sie E-Mail-Adressen zuerst entfernen möchten, tun einfach:

re.sub("[\w][email protected][\w]+\.[c][o][m]", "", input_string) 
+0

was ist, wenn die E-Mail-Adresse eines anderen - [email protected] ?? –

+0

Das hängt davon ab, dass Sie einfach eine Regex haben können, die genau drei Zeichen nach einem '.' Entspricht: '[\ w] + @ [\ w] + \. [A-z] {3}'. Es hat vom OP nicht genau gesagt, was sie will. @WasiAhmad – Jarvis

+0

Was ist, wenn meine E-Mail-Adresse 'Hallo @ example.ninja' ist? Oder 'Hallo @ Beispiel.nl'? Oder 'Hallo.there @ example.com'? Oder 'Hallo + dort @ example.com'? – Carpetsmoker

0

Sie den folgenden regulären Ausdruck als sie verwenden können ignoriert E-Mail-Adressen.

(^|[^@\w])@(\w{1,15}) 

Beispielcode

import re 

text = "@RayFranco is answering to @jjconti, this is a real '@username83' but this is [email protected], and this is a @probablyfaketwitterusername"; 

result = re.findall("(^|[^@\w])@(\w{1,15})", text) 

print(result); 

Das gibt:

[('', 'RayFranco'), (' ', 'jjconti'), ("'", 'username83'), (' ', 'probablyfaketwi')] 

Beachten Sie, dass, twitter max 15 Zeichen für Twitter-Benutzernamen erlaubt. Basiert auf Twitter specs:

Ihr Benutzername darf nicht länger als 15 Zeichen sein. Ihr richtiger Name kann länger sein (20 Zeichen), aber Benutzernamen werden für den Willen der Einfachheit kürzer gehalten. Ein Benutzername darf nur alphanumerische Zeichen enthalten (Buchstaben A-Z, Ziffern 0-9) mit Ausnahme von Unterstrichen, wie oben erwähnt. Überprüfen Sie, ob der gewünschte Benutzername keine Symbole, Bindestriche oder Leerzeichen enthält.

Verwandte Themen