2016-06-14 7 views
2

リスト文字列のtwitterテキストデータ、たとえば次のデータがあります(実際には、これらのデータだけでなく多数のテキストがあります)。私はすべてのユーザー名を@とurlリンクの後にtwitterテキストで抽出したいと思います。たとえば、galaxy5univとurl link。Pythonは、正規表現を使用してtwitterテキストデータの@userとurlリンクを抽出します

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'] 

私のコード:Twitterのデータを多数のコードをテストによって

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) 

、私はURLと名前の両方のための私の二つのパターンがいくつかTwitterのテキストであるが(間違っていることを持っていますデータが正しい)。大きなTwitterのデータの場合は、Twitterのテキストから名前とURLを抽出するためのドキュメントやリンクがありますか?

Twitterのデータから名前とURLを抽出するアドバイスがありましたら、感謝してください!

+1

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

+0

ご意見ありがとうございます。多数の名前がありますツイッターデータのデータ。名前には、a-zA-Z0-9_だけでなく、#%^などの特殊文字も含まれることがあります。この場合、どのようにそれを解決するには? – tktktk0711

+1

大括弧内の文字のリストに追加するだけですが、一部の文字を適切にエスケープする必要があることを覚えておいてください。 – mic4ael

答えて

3

注を参照してください。 :に一致除外するに

、あなたは[^\s]否定文字クラスと同等に速記\Sクラスを変換し、それに:を追加する必要があります。

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

、それは最初の前の空白以外のシンボルのキャプチャを停止します:regex demoを参照してください。

最後に:までキャプチャする必要がある場合は、キャプチャグループの後に:を追加することができます。pn = re.compile(r'@(\S+):')

正規表現に一致する正規表現は、many on the Web,just chooseが最適です。ここで

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

今、私はURLと名前の両方の2つのパターンが間違っていることを知っています。あなたたちは、いくつかの文書を持っているか、TwitterのテキストからURLとURLを抽出するようにリンクしていますか? – tktktk0711

+0

'@([^ \ s:] +)'について何が間違っていますか? URLの正規表現はどこにでもあります。 [Here](http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/)は良いリソースです。そして、ここには[大きなURLでURLをマッチングする](http://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string)のSOスレッドがあります。 ** [このIDEONEデモ](https://ideone.com/rgAy2K)**を参照してください。 –

+0

あなたの情熱に感謝します。たとえば、いくつかの名前:@ t:* d-8:。あなたは、ツイッターの名前が異なる種類のフォームを持っていることを知っています。スペースを使ってユーザー名を見たことがありません。 – tktktk0711

1

ユーザ名が特殊文字が含まれていない場合は、使用することができます。

@([\w]+) 

は、あなたのpn = re.compile(r'@(\S+)')正規表現が@後に任意の1+非空白文字をキャプチャすることをLive demo

+0

ご意見ありがとうございます。 @の後に名前を抽出するための2つのパターンと、twitterテキストのURLリンクが間違っています。あなたは名前とURLリンクが多くの種類のフォームを持っていることを知っています。これに関する文書やリンクがあれば教えてください! – tktktk0711

1

私は数年前のつぶやきを解析する記事AMOUTを書きました。 https://fromzerotocodehero.blogspot.com/2010/12/parsing-tweets-links-users-and-hash.html

+0

私はあなたの記事を読むでしょう。 @の後に名前を抽出するための2つのパターンと、twitterテキストのURLリンクが間違っています。あなたは名前とURLリンクが多くの種類のフォームを持っていることを知っています。これに関する文書やリンクがあれば教えてください! – tktktk0711

関連する問題