2016-07-25 8 views
1

私は、pythonでテキストファイルから単語を分割しています。私は行番号(c)とインデックス付きの辞書(word_positions)を受け取りました。次に、ゼロ行列(c、index)を作成します。ここでは、コードは次のようになります。Pythonの行列を移植する

from collections import defaultdict 
import re 
import numpy as np 

c=0 

f = open('/Users/Half_Pint_Boy/Desktop/sentenses.txt', 'r') 

for line in f: 
    c = c + 1 

word_positions = {} 

with open('/Users/Half_Pint_Boy/Desktop/sentenses.txt', 'r') as f: 
    index = 0 
    for word in re.findall(r'[a-z]+', f.read().lower()): 
     if word not in word_positions: 
      word_positions[word] = index 
      index += 1 
print(word_positions) 

matrix=np.zeros(c,index) 

私の質問:cmatrix[c,index] = count、 - 行の数である、index -theインデックス付きの位置とcountの-the数:私はこれを取得することができるように行列を取り込むことができますどのように数えられた単語を連続してカウントする

+0

それはあなたがやろうとしているかは明らかではありません。より多くの説明/簡単な例を追加できますか? – Amoss

+0

'len(lines.split())'(各空白で文字列splitから作られた配列の長さ)を使用するだけで、単語の数を得ることができます – HolyDanna

+0

私はテキストに22行と254のユニークな単語を持っています。だから、私の行列の大きさになります。そして、インデックス化されたユニークな単語ごとに、各単語の数を行数として数える必要があります。 – HalfPintBoy

答えて

1

を与え、括弧なしで作成することができ、次の試してみてください。

import re 
import numpy as np 
from itertools import chain 

text = open('/Users/Half_Pint_Boy/Desktop/sentenses.txt') 

text_list = text.readlines() 

c=0 

for i in range(len(text_list)): 
    c=c+1 

text_niz = [] 

for i in range(len(text_list)): 
    text_niz.append(text_list[i].lower()) # перевел к нижнему регистру 

slovo = [] 

for j in range(len(text_niz)): 
    slovo.append(re.split('[^a-z]', text_niz[j])) # токенизация 

for e in range(len(slovo)): 

    while slovo[e].count('') != 0: 
     slovo[e].remove('') # удалил пустые слова 

slovo_list = list(chain(*slovo)) 
print (slovo_list) # составил список слов 

slovo_list=list(set(slovo_list)) # удалил повторяющиеся 
x=len(slovo_list) 

s = [] 

for i in range(len(slovo)): 
    for j in range(len(slovo_list)): 
     s.append(slovo[i].count(slovo_list[j])) # посчитал количество слов в каждом предложении 

matr = np.array(s) # матрица вхождений слов в предложения 
d = matr.reshape((c, x)) # преобразовал в матрицу 22*254 
0

n-dimensional listのようなものを作成しようとしているようです。これらは、次のような自分自身の内側に入れ子のリストによって達成されています。この概念はPythonで非常に柔軟であり、あなたが希望としても、内部のネストされた辞書で行うことができます

two_d_list = [[0, 1], [1, 2], [example, blah, blah blah]] 
words = two_d_list[2] 
single_word = two_d_list[2][1] # Notice the second index operator 

two_d_list = [{"word":1}, {"example":1, "blah":3}] 
words = two_d_list[1] # type(words) == dict 
single_word = two_d_list[2]["example"] # Similar index operator, but for the dictionary 

これは、あなたが望むものを機能的に実現しますが、matrix[c,index]の構文は使用しませんが、この構文は実際にはインデックス作成のためにPythonには存在しません。角括弧内のカンマは通常、リストリテラルの要素を示します。代わりに、あなたはあなたが欲しいsyntxを達成するために、インデックス演算子をオーバーロードすることができるかもしれmatrix[c][index] = count


と行の辞書の要素にアクセスすることができます。 Hereは、あなたが望む構文を達成するための質問です。要約:

__getitem__(self, inex)関数をリストクラスのラッパーにオーバーロードし、タプルを受け入れるように関数を設定します。タプルは、構文にmatrix[c, index] = count

関連する問題