2016-12-07 8 views
0

두 개의 큰 csv 파일이 있습니다. 주요 하나는 제품 이름으로 필드가 있고 다른 CSV 파일에는 키워드가 있습니다. 첫 번째 CSV 파일에서 제품 이름으로 이러한 키워드를 찾고 있습니다. 그 순간 내 코드는 다음과 같습니다 :두 개의 큰 csv 파일 (파이썬)에서 문자열의 하위 문자열을 찾는 방법

class Keyword: 
    # keyword class for adding match keywords 
     def __init__(self): 
      self.data={} 
     def add(self, keyword, count): 
      if keyword in self.data.keys(): 
      self.data[keyword]+=count 
      else: 
      self.data[keyword]=count 
     def get_match(self): 
      temp = [] 
      for key, value in self.data.iteritems(): 
       temp.append(key) 
       temp.append(value) 
      return temp 

for i, product_row in product_df.iterrows(): 
    product_title = product_row['title'].lower().replace(',','') 
    k = Keyword() 
    for j, keyword_row in keyword_df.iterrows(): 
     if keyword_row['keyword'] in product_title: 
      k.add(keyword_row['keyword'], keyword_row['count']) 

    match_items = k.get_match() 
    if len(match_items)>0: 
     temp = product_row.tolist() 
     temp = [str(x).replace(',','') for x in temp] 
     temp.extend(match_items) 
     print>>sys.stdout, str(temp).strip('[]').replace("'",'') 
    else: 
     pass 

이 코드는 매우 느리고 서로 비교해야 할 많은 CSV 파일이 있습니다. 이 파일들을 비교하는 더 효율적인 방법을 알고 있습니까? 에 키워드를

product_title = set(product_row['title'].lower().replace(',','').split()) 
+0

코드 들여 쓰기를 수정하십시오. –

+0

csv 파일의 제품 이름 입력란에 각 키워드 *가 * 표시되는 횟수를 계산하고 있습니까? – wwii

+0

각 파일에서 몇 줄을 보여주십시오. – wwii

답변

0

전체 키워드 파일을 읽고 저장 : 키워드가 정말 하나의 단어보다는 단어로 표현하는 경우

+0

감사합니다. 놀랍게도 훨씬 빨라졌습니다. – Moohebat

0

, 내 첫 번째 제안은 빠른 조회를 위해 집합으로 제품 제목을 변환하는 것입니다 목록. 그런 다음 제품 필드를 읽고 필드에 키워드가 있는지 확인한 다음 인쇄하십시오.

with open("keywords.txt", "r") as f: 
    keywords = f.read().splitlines() 

with open("products.txt") as f: 
    for product_name in f: 
     if any(keyword in product_name for keyword in keywords): 
      print product_name 
+0

문제는 키워드가 bigram, trigram 등이 될 수 있다는 것입니다. 이 키워드가 반복되는 제품을 알고 싶습니다. – Moohebat

+0

바이, 트라이 등의 단어 순서에 관심이 있습니까? 그렇지 않은 경우 키워드를 사전 세트로 사전 변환하고 제목 단어 세트와 교차 설정을 계산할 수도 있습니다. if keyword_row [ 'keyword'] & product_title : ' – DyZ

+0

예, 순서가 중요합니다. – Moohebat