2016-06-14 6 views
2

Es gibt eine Liste Zeichenfolge twitter Text Daten, zum Beispiel die folgenden Daten (tatsächlich gibt es eine große Anzahl von Text, nicht nur diese Daten), Ich möchte den ganzen Benutzernamen nach @ und URL-Link im Twitter-Text extrahieren, zum Beispiel: galaxy5univ und url link.Python zum Extrahieren der @ Benutzer und URL-Link in Twitter Textdaten mit Regex

tweet_text = ['@galaxy5univ I like you', 
    'RT @BestOfGalaxies: Let's sit under the stars ...', 
    '@jonghyun__bot .........((thanks)', 
    'RT @yosizo: thanks.ddddd <https://yahoo.com>', 
    'RT @LDH_3_yui: #fam, ccccc https://msn.news.com'] 

mein Code:

import re 
pu = re.compile(r'http\S+') 
pn = re.compile(r'@(\S+)') 
for row in twitter_text: 
    text = pu.findall(row) 
    name = (pn.findall(row)) 
    print("url: ", text) 
    print("name: ", name) 

Durch den Code in einer großen Anzahl von Twitter-Daten zu testen, habe ich bekam, dass meine zwei Muster für URL und Namen beide falsch sind (obwohl in einigen twitter Text Daten sind richtig). Habt ihr einige Dokumente oder einen Link zum Extrahieren von Namen und URL von Twitter-Text im Fall von großen Twitter-Daten.

Wenn Sie Tipps zum Extrahieren von Name und URL von Twitter-Daten haben, bitte sagen Sie mir, danke!

+1

'pn = re.compile (r '@ ([a-zA-Z0-9 _] +)')' – mic4ael

+0

Danke für Ihren Kommentar, Sie wissen, es gibt eine große Anzahl von Namen Daten in den Twitter-Daten. Manchmal enthält der Name einige Sonderzeichen wie #% ^, nicht nur a-zA-Z0-9_. In diesem Fall, wie man es löst? – tktktk0711

+1

fügen Sie sie einfach zu der Liste der Zeichen in den eckigen Klammern hinzu, aber denken Sie daran, dass einige der Zeichen richtig maskiert werden müssen – mic4ael

Antwort

3

Beachten Sie, dass Ihre pn = re.compile(r'@(\S+)') regex nach @ keine 1+ Nicht-Leerzeichen erfassen wird.

ausschließen Um : passende, müssen Sie die Kurz \S Klasse [^\s] negierte Zeichenklasse äquivalent zu konvertieren, und fügen Sie : es:

pn = re.compile(r'@([^\s:]+)') 

Nun wird es vor der ersten Erfassung nicht-Leerzeichen Symbole stoppen :. Siehe die regex demo.

Wenn Sie bis zum letzten : erfassen müssen, können Sie einfach : nach der Erfassungsgruppe hinzufügen: pn = re.compile(r'@(\S+):').

Wie für eine URL passend Regex gibt es many on the Web, just choose die eine, die am besten für Sie funktioniert. Hier

ist ein example code:

import re 
p = re.compile(r'@([^\s:]+)') 
test_str = "@galaxy5univ I like you\nRT @BestOfGalaxies: Let's sit under the stars ...\[email protected]__bot .........((thanks)\nRT @yosizo: thanks.ddddd <https://y...content-available-to-author-only...o.com>\nRT @LDH_3_yui: #fam, ccccc https://m...content-available-to-author-only...s.com" 
print(p.findall(test_str)) 
p2 = re.compile(r'(?:http|ftp|https)://(?:[\w_-]+(?:(?:\.[\w_-]+)+))(?:[\w.,@?^=%&:/~+#-]*[\[email protected]?^=%&/~+#-])?') 
print(p2.findall(test_str)) 
# => ['galaxy5univ', 'BestOfGalaxies', 'jonghyun__bot', 'yosizo', 'LDH_3_yui'] 
# => ['https://yahoo.com', 'https://msn.news.com'] 
+0

Nun, ich habe, dass meine beiden Muster für URL und Name beide falsch sind. Habt ihr einige Dokumente oder Links zu Auszugsnamen und URLs aus Twitter-Text? – tktktk0711

+0

Was ist falsch an '@ ([^ \ s:] +)'? Ein Regex für URL kann überall gefunden werden. [Hier] (http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/) ist eine gute Ressource. Und hier ist ein SO-Thread zu [übereinstimmenden URLs in einem größeren Text] (http://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string). ** Siehe [diese IDEONE-Demo] (https://ideone.com/rgAy2K) **. –

+0

danke für deine leidenschaft. zum Beispiel einige Namen: @t: * d-8 :. Sie wissen, dass die Namen in Twitter unterschiedliche Formen haben. – tktktk0711

1

Wenn die Benutzernamen keine Sonderzeichen enthalten, können Sie verwenden:

@([\w]+) 

Siehe Live demo

+0

danke für Ihre Kommentare. Ich habe gehört, dass meine zwei Muster zum Extrahieren von Namen nach @ und URL-Link in Twitter-Text falsch sind. Sie wissen, dass der Name und die URL-Links viele nette Formen haben. Wenn Sie einige Dokumente oder Links dazu haben, sagen Sie es mir bitte! – tktktk0711

1

Ich habe einen Artikel geschrieben amout Tweets Jahren Parsen vor. Ich denke, es ist immer noch relevant: https://fromzerotocodehero.blogspot.com/2010/12/parsing-tweets-links-users-and-hash.html

+0

danke @ OWCA. Ich werde deinen Artikel lesen. Ich habe gehört, dass meine zwei Muster zum Extrahieren von Namen nach @ und URL-Link in Twitter-Text falsch sind. Sie wissen, dass der Name und die URL-Links viele nette Formen haben. Wenn Sie einige Dokumente oder Links dazu haben, sagen Sie es mir bitte! – tktktk0711

Verwandte Themen