現在、テキストから特定のワードを取得するプログラムを作ろうとしているのですが、先ほどまで正常に形態素解析を行っていましたが英字は半角、全角を問わず、数字は半角の場合、解析をスキップし次のワード解析を始めるようになってしまいました。
(例:5月15日、Sunny day。今日も晴れた。mh3が楽しい。→
[5月, 名詞-副詞可能], [日, 名詞-接尾-助数詞], [、, 記号-読点], [。, 記号-句点], [今日, 名詞-副詞可能], [も, 助詞-係助詞], [晴れ, 動詞-自立], [た, 助動詞], [。, 記号-句点], [3, 名詞-数], [が, 助詞-格助詞-一般], [楽しい, 形容詞-自立], [。, 記号-句点])
コマンドプロント上でMeCabを起動した場合、全単語を正常に形態素解析できます。
以下が現状のコードです。すべての単語を解析するために訂正すべき箇所を教えていただきたいです。
java version "13.0.2" 2020-01-14
mecab of 0.996
java
1public class MecabTest { 2 3 static final String text_path = "C:\test\mail_text.txt"; 4 static final String char_set = "SJIS"; 5 6 public static void main(String args[]) throws IOException { 7 8 Runtime runtime = Runtime.getRuntime(); 9 String str = getText().replaceAll(" ", "").trim().replaceAll("[\r\n]+", "\r\n"); 10 FileCreator(str);//テキストファイルの作成メソッド 11 String[] Command = {"cmd", "/c", "mecab.exe -O simple " + text_path}; 12 13 Process p = null; 14 File dir = new File(//MeCabのbinファイルの場所); 15 try { 16 p = runtime.exec(Command, null, dir); 17 } catch (IOException e) { 18 e.printStackTrace(); 19 } 20 21/** 形態素解析終了まで待機 **/ 22 try { 23 p.waitFor(1, TimeUnit.SECONDS); 24 } catch(InterruptedException e) { 25 e.printStackTrace(); 26 } 27/** ---------------------- **/ 28 29 InputStream is = p.getInputStream(); 30 BufferedReader br = new BufferedReader(new InputStreamReader(is, char_set)); 31 p.destroy(); 32 33 ArrayList<String> words = new ArrayList<String>(); 34 ArrayList<ArrayList<String>> allWords = new ArrayList<ArrayList<String>>(); 35 36 while(true) { 37 try { 38 String line = br.readLine(); 39 if(line == null) { 40 br.close(); 41 break; 42 } else { 43 words.add(line); 44 } 45 } catch(IOException e) { 46 e.printStackTrace(); 47 } 48 } 49 for(int i = 0; i < words.size(); i++) { 50 String[] word = words.get(i).split("\t"); 51 if(word.length == 2) { 52 addword(allWords, word[0], word[1]); 53 } else { 54 addword(allWords, word[0], "EOS"); 55 } 56 } 57 System.out.println(allWords); 58 FileDelete(text_path); 59 } 60}
あなたの回答
tips
プレビュー