2011-10-02 3 views
0

트윗 데이터를 구문 분석하려고합니다.python tweet parsing

59593936 3061025991 null null <d>2009-08-01 00:00:37</d> <s>&lt;a href="http://help.twitter.com/index.php?pg=kb.page&amp;id=75" rel="nofollow"&gt;txt&lt;/a&gt;</s> <t>honda just recalled 440k accords...traffic around here is gonna be light...win!!</t> ajc8587 15 24 158 -18000 0 0 <n>adrienne conner</n> <ud>2009-07-23 21:27:10</ud> <t>eastern time (us &amp; canada)</t> <l>ga</l> 
22020233 3061032620 null null <d>2009-08-01 00:01:03</d> <s>&lt;a href="http://alexking.org/projects/wordpress" rel="nofollow"&gt;twitter tools&lt;/a&gt;</s> <t>new blog post: honda recalls 440k cars over airbag risk http://bit.ly/2wsma</t> madcitywi 294 290 9098 -21600 0 0 <n>madcity</n> <ud>2009-02-26 15:25:04</ud> <t>central time (us &amp; canada)</t> <l>madison, wi</l> 

내가 트윗의 총 수와 키워드 관련 트윗의 수를 얻으려면 다음과 같이

내 데이터 모양이다. 텍스트 파일에 키워드를 준비했습니다. 또한 트윗 텍스트 내용, 언급 (@), 리트 윗 (RT) 및 URL (다른 파일의 모든 URL을 저장하고 싶음)이 포함 된 트윗의 총 수를 얻고 싶습니다.

이렇게 코드를 작성했습니다.

import time 
import os 

total_tweet_count = 0 
related_tweet_count = 0 
rt_count = 0 
mention_count = 0 
URLs = {} 

def get_keywords(filepath): 
    with open(filepath) as f: 
     for line in f: 
      yield line.split() 

for line in open('/nas/minsu/2009_06.txt'): 
    tweet = line.strip() 

    total_tweet_count += 1 

    with open('./related_tweets.txt', 'a') as save_file_1: 
     keywords = get_keywords('./related_keywords.txt', 'r') 

     if keywords in line: 
      text = line.split('<t>')[1].split('</t>')[0] 

      if 'http://' in text: 
       try: 
        url = text.split('http://')[1].split()[0] 
        url = 'http://' + url 

        if url not in URLs: 
         URLs[url] = [] 
        URLs[url].append('\t' + text) 

        save_file_3 = open('./URLs_in_related_tweets.txt', 'a') 
        print >> save_file_3, URLs 

       except: 
        pass 

      if '@' in text: 
       mention_count +=1 

      if 'RT' in text: 
       rt_count += 1 

      related_tweet_count += 1 

      print >> save_file_1, text 

    save_file_2 = open('./info_related_tweets.txt', 'w') 

print >> save_file_2, str(total_tweet_count) + '\t' + srt(related_tweet_count) + '\t' + str(mention_count) + '\t' + str(rt_count) 

save_file_1.close() 
save_file_2.close() 
save_file_3.close() 

키워드 세트는

Happy 
Hello 
Together 

내가 내 코드는 많은 문제를 가지고 있다고 생각 좋아하지만, 첫 번째 오류는 follws과 같습니다

Traceback (most recent call last): 
    File "health_related_tweets.py", line 21, in <module> 
    keywords = get_keywords('./public_health_related_words.txt', 'r') 
TypeError: get_keywords() takes exactly 1 argument (2 given) 

저를 도와주세요!

답변

3

이 오류는 오류에서 자명하지만 get_keywords() 호출에서 두 개의 매개 변수를 지정했지만 구현에는 하나의 매개 변수 만 있습니다.

def get_keywords(filepath, mode): 
    with open(filepath, mode) as f: 
     for line in f: 
      yield line.split() 

그런 다음 당신은 특정 오류없이 다음 줄을 사용할 수 있습니다 : 당신은 같은에 get_keywords 구현을 변경해야합니다

keywords = get_keywords('./related_keywords.txt', 'r') 
+0

역 추적 (마지막으로 가장 최근 통화) : 파일 "health_related_tweets.py", 라인 23에서 키워드의 경우 TypeError : 'in '은 생성자가 아닌 왼쪽 피연산자로 문자열을 필요로합니다. /// 이제이 오류가 발생했습니다. PLZ 도와주세요! – ooozooo

+0

@MINSUPARK'get_keywords()'는 문자열이 아닌 생성자를 반환하므로'keyword in line :'을 호출하면'keywords'가 문자열이 아니기 때문에 오류가 발생합니다. –

+0

@CodyHess 그러면 어떻게 해결할 수 있습니까? 사실, 나는 초보자이다. 그래서 네 도움이 필요해! – ooozooo

0

지금이 오류가 점점 :

역 추적을 (대부분의 최근 통화 마지막) : 줄에있는 키워드 인 경우 "health_related_tweets.py"파일 23 행 : TypeError : 'in'은 생성자가 아닌 왼쪽 피연산자로 문자열을 필요로합니다.

이유는 keywords = get_keywords(...)이 생성기를 반환한다는 것입니다. 논리적으로 생각하면 키워드는 모든 키워드 목록이어야합니다. 이 목록의 각 키워드에 대해 짹짹/줄에 있는지 확인하고 싶습니다.

샘플 코드 :

keywords = get_keywords('./related_keywords.txt', 'r') 
has_keyword = False 
for keyword in keywords: 
    if keyword in line: 
    has_keyword = True 
    break 
if has_keyword: 
    # Your code here (for the case when the line has at least one keyword) 

(위의 코드는 if keywords in line:를 대체 할 것)

+0

다른 오류가 있습니다. (Traceback (최근 호출 마지막)) : 파일 "health_related_tweets.py", 줄 25, 키워드의 키워드 : 파일 "health_related_tweets.py", 줄 13, get_keywords yield line.split(). lower() AttributeError : 'list'객체에는 'lower'속성이 없습니다.) 구문 분석을 위해 소문자로 구문 분석 될 키워드와 트윗을 변환해야한다고 생각했습니다. 그래서 나는 ".lower"를 코드에 넣었다. 그러나 그것은 오류가 ..... 어떻게 수정해야합니까? – ooozooo

관련 문제