5

mallet トピック モデリング サンプル コードを使用していますが、正常に動作しますが、このステートメントのパラメーターが実際に何を意味するのか知りたいですか?

instances.addThruPipe(new CsvIterator(new FileReader(dataFile),
                                      "(\\w+)\\s+(\\w+)\\s+(.*)",
                                      3, 2, 1)  // (data, target, name) field indices                    
                     );
4

2 に答える 2

8

ドキュメントから:

この反復子は、おそらく Line Pattern Iterator と呼ばれる方が適切で、ファイル全体を読み取り、正規表現に基づいて 1 行ごとに 1 つのインスタンスを返します。

フォームのデータがある場合

[名前] [ラベル] [データ]

あなたが興味を持っている電話は

CsvIterator(java.io.Reader input, java.lang.String lineRegex, 
            int dataGroup, int targetGroup, int uriGroup) 

最初のパラメーターは、ファイル リーダーや文字列リーダーのように、データを読み込む方法です。2 番目のパラメーターは、リーダーから読み取られた各行からデータを抽出するために使用される正規表現です。あなたの例では、次のよう(\\w+)\\s+(\\w+)\\s+(.*)に変換されます。

  • 1 つ以上の英数字 (キャプチャ グループ、これはインスタンスの名前)、その後に続く
  • 1 つ以上の空白文字 (タブ、スペース、..)、その後に続く
  • 1 つ以上の英数字 (キャプチャ グループ、これはラベル/ターゲット)、その後に続く
  • 1 つ以上の空白文字 (タブ、スペース、..)、その後に続く
  • 0文字以上(これがデータです)

数字3, 2, 1は、データが最後に、ターゲットが 2 番目に、名前が最初に来ることを示します。正規表現は基本的に、各行の形式がドキュメントに記載されているとおりであることを保証します。

test1 spam Wanna buy viagra?
test2 not-spam Hello, are you busy on Sunday?

CsvIteratorこのクラスが読み込むのは実際にはカンマ区切りの値ではなく、空白 (スペース、タブなど) で区切られた値であるため、ひどい名前です。

于 2015-01-13T18:51:03.700 に答える