2017-06-09 7 views
0

に存在し、このようになりますキーワードの組み合わせは、私はPythonでリストの次のリストを持っているファイル

combos = [list(x) for x in itertools.permutations(keywords_list, 2)] 

combos 
[['revenue', 'margins'], ['revenue', 'liquidity'], ['revenue', 'ratio'], ['revenue', 'pricing'], ['revenue', 'assets'], ['revenue', 'recent trends']] 

が今私の目的は確認することである

各キーワードペアが内に存在する場合にテキストファイルかどうかを調べ、カウントします。キーワードペアが存在する回数。

n_occurence = defaultdict(lambda:0) 
with open(file_path) as f: 
    for line in f: 
     for item in combos: 
      if item[1] and item[2] in line: 
       n_occurence[item] +=1 

私は取得していますエラー、次の

IndexError: list index out of range 

どのように私はこれにアプローチすべきか?

+0

項目[0]とアイテム[1] – e4c5

+0

と、このソリューションはスケールしないでそれを行うことができます。ファイルサイズやキーワードリストが大きくなるにつれてひどく遅くなります。 – e4c5

+0

カウントするには 'collections.Counter()'を使う方が 'defaultdict'よりも簡単です。アルゴリズムを変更する必要があります。すべてのキーワードの順列のリストを事前に作成する必要はありません。代わりに、各行を見て、その行からキーワードを抽出し、見つかった各キーワードのペアの数を増やします。 –

答えて

0

あなたはreモジュール

import re 
data = [['revenue', 'margins'], ['revenue', 'liquidity'], ['revenue', 'ratio'], ['revenue', 'pricing'], ['revenue', 'assets'], ['revenue', 'recent trends']] 
with open('a.txt') as f: 
    txt = f.read() 
    for d in data: 
     c1 = re.findall(d[0],txt) 
     c2 = re.findall(d[1],txt) 
     if c1 and c2: 
      print {c1[0]:len(c1),c2[0]:len(c2)} 

出力

{'margins': 1, 'revenue': 2} 
{'liquidity': 1, 'revenue': 2} 
+0

ありがとうございます。これは私の問題を解決しました:) – sonam

+0

あなたも歓迎です、あなたも投票を与えることができます – Arun

+0

私はupvoteに十分なレポを持っていないので私は傾ける。 – sonam

関連する問題