ファイルの各行は、単語のベクトル記述(埋め込み)を表す50の浮動小数点数で始まる単語で始まります。私はファイルを読み込み、各単語とその埋め込みをハッシュテーブルに格納しようとしています。私が直面している問題は、数値書式例外または時には範囲外の配列例外が発生することです。各単語とその埋め込みをハッシュマップに読み込んで保存するにはどうすればよいですか?文字列と浮動小数点数のデータを含むテキストファイルをハッシュマップに読み込んで保存する
Sノードクラス:
public class sNode{ // Node class for hash map
public String word;
public float[] embedding;
public sNode next;
public sNode(String S, float[] E, sNode N){ // Constructor
word = S;
embedding = new float[50];
for (int i=0;i<50;i++)
embedding[i] = E[i]; next = N;
}
hashTableStringsクラス:
public class hashTableStrings{
private static sNode [] H;
private int TABLE_SIZE;
private int size;
public hashTableStrings(int n){ // Initialize all lists to null H = new sNode[n]; for(int i=0;i<n;i++) H[i] = null; }
size = 0;
TABLE_SIZE = n;
H = new sNode[TABLE_SIZE];
for(int i=0;i<TABLE_SIZE;i++)
H[i] = null;
}
public int getSize(){ // Function to get number of key-value pairs
return size;
}
public static void main (String [] args) throws IOException{
Scanner scanner = new Scanner(new FileReader("glove.6B.50d.txt"));
HashMap<String, Float> table = new HashMap<String, Float>();
while (scanner.hasNextLine()) {
String[] words = scanner.nextLine().split("\t\t"); // split space between word and float number embedding
for (int i=0; i<50;i++){
table.put(words[0], Float.parseFloat(words[i]));
}
}
System.out.println(table);
}
TXTファイルのサンプル: ファイルには、次のリンクで見つけることができ
: https://nlp.stanford.edu/projects/glove/
ファイル
glove.6B.zip
をダウンロードして、glove.6B.50d.txt
テキストファイルを開きます。
を使用し、
key
ためValue
としてすべての浮動値を格納することになります例外を除いて、デバッガでプログラムの実行をステップ実行することをお勧めします。これにより、コード内のバグを特定するのに役立ちます。 – dave