problem with TestRun in java

139 views
Skip to first unread message

wenh123

unread,
Mar 19, 2009, 4:47:22 AM3/19/09
to ckipclient
當我執行時 有以下的錯誤 請問要如何更正 謝謝
Exception in thread "main" java.util.regex.PatternSyntaxException:
Dangling meta character '?' near index 0
??
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.sequence(Pattern.java:1878)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.lang.String.split(String.java:2293)
at java.lang.String.split(String.java:2335)
at wenh.CKIP.getTerm(CKIP.java:156)
at wenh.TestRun.main(TestRun.java:19)
台新金控12月3日將召開股東臨時會進行董監改選Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)
Message has been deleted

onlinemad

unread,
Mar 19, 2009, 4:59:17 AM3/19/09
to ckipclient
我猜很有可能是編碼的問題,要傳的字串編碼應該是 utf-8

如果你使用 eclipse on windows

請修改編碼的設定,可以參考下面這篇文章
http://wiki.cheyingwu.tw/Eclipse/UTF8-Setting

wenh123

unread,
Mar 19, 2009, 10:22:01 AM3/19/09
to ckipclient
我是用Netbeans 且環境已改成utf-8
還是有一樣的錯誤
我在for(Term t ..) 之前加了
System.out.println("c length="+s.length);
for(String tt: s){
System.out.println(tt);
}
結果印出

台新金控12月3日將召開股東臨時會進行董監改選c length=1
 台新(N) 金控(N) 12月(N) 3(DET) 日(M) 將(ADV) 召開(Vt) 股東(N) 臨時會(N) 進行(Vt) 董監(N)
 改選(Vt)

看來 c.getSentence(); 的回傳結果是對的
錯誤是發生在 getTerm() 內的
for (String e : s.split("? ")) {

好像我們對s 這個String 來取token 即可
為什麼要用getTerm?
我們輸入的句子中好像沒有"?"

以下是錯誤訊息 謝謝
Exception in thread "main" java.util.regex.PatternSyntaxException:
Dangling meta character '?' near index 0
??
^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.sequence(Pattern.java:1878)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
at java.util.regex.Pattern.<init>(Pattern.java:1133)
at java.util.regex.Pattern.compile(Pattern.java:823)
at java.lang.String.split(String.java:2293)
at java.lang.String.split(String.java:2335)
at wenh.CKIP.getTerm(CKIP.java:157)
at wenh.TestRun.main(TestRun.java:25)
Java Result: 1


On 3月19日, 下午4時59分, onlinemad <online...@gmail.com> wrote:
> 我猜很有可能是編碼的問題,要傳的字串編碼應該是 utf-8
>
> 如果你使用 eclipse on windows
>
> 請修改編碼的設定,可以參考下面這篇文章http://wiki.cheyingwu.tw/Eclipse/UTF8-Setting

onlinemad

unread,
Mar 19, 2009, 11:31:42 AM3/19/09
to ckipclient
我下載了 Netbeans 6.5.1 來測了,沒有任何問題
我的環境是
jdk "1.6.0_11"
dom4j 1.6.1
ckipclient 0.3

輸出結果
run:
台新金控12月3日將召開股東臨時會進行董監改選。台新,N
金控,N
12月,N
3,DET
日,M
將,ADV
召開,Vt
股東,N
臨時會,N
進行,Vt
董監,N
改選,Nv
。,PERIODCATEGORY
BUILD SUCCESSFUL (total time: 0 seconds)

Netbeans 專案檔我傳到網路上
http://cid-47fde5f8c37e781b.skydrive.live.com/self.aspx/Public/JavaApplication1.zip

你可以抓下來執行看看

wenh123

unread,
Mar 19, 2009, 3:37:54 PM3/19/09
to ckipclient
可以了 差異是在我沒有加入ckipclient-java-0.3.jar
而是自行編譯 Term.java
但是 我又試了 TestRunYahoo 好像沒有結果 執行結果如下:
-----
run:
台新金控12月3日將召開股東臨時會進行董監改選。BUILD SUCCESSFUL (total time: 1 second)
-----
請問要如何用Yahoo的service 在netbeans的環境?
原始檔如下: 謝謝
package javaapplication1;
import tw.cheyingwu.ckip.Term;
import tw.cheyingwu.ckip.YahooCAS;
/**
*
* @author wenh
*/
public class TestRunYahoo {
public static void main(String[] args) {

String e = "台新金控12月3日將召開股東臨時會進行董監改選。";
YahooCAS c = new YahooCAS(e);
c.setAppid("qOe7mJzV34GFoZT8u94qDVs_maOyLLpTkA7qz7cA--");
c.setContent(e);
c.send();

System.out.print(c.getContent());

//String s = c.getReturnText();
//System.out.println(s);

for(Term t : c.getTerm()){
System.out.println(t.getTerm()+","+t.getTag());
}

}
}
On 3月19日, 下午11時31分, onlinemad <online...@gmail.com> wrote:
> 我下載了 Netbeans 6.5.1 來測了,沒有任何問題
> 我的環境是
> jdk "1.6.0_11"
> dom4j 1.6.1
> ckipclient 0.3
>
> 輸出結果
> run:
> 台新金控12月3日將召開股東臨時會進行董監改選。台新,N
> 金控,N
> 12月,N
> 3,DET
> 日,M
> 將,ADV
> 召開,Vt
> 股東,N
> 臨時會,N
> 進行,Vt
> 董監,N
> 改選,Nv
> 。,PERIODCATEGORY
> BUILD SUCCESSFUL (total time: 0 seconds)
>
> Netbeans 專案檔我傳到網路上http://cid-47fde5f8c37e781b.skydrive.live.com/self.aspx/Public/JavaAp...

onlinemad

unread,
Mar 19, 2009, 8:35:35 PM3/19/09
to ckipclient
關於Yahoo的service

我有修正了一個地方在YahooCAS的75行
BufferedReader response = new BufferedReader(new InputStreamReader(
httpConn.getInputStream(),"UTF-8"));
加上了回傳字串的編碼
不加的話,Eclipse可以執行,但是netbean不行
另外我也釋出 0.3.1 的版本,包含這次的修正

還有要使用Yahoo的service
api key 要先啟動

YahooCAS c = new YahooCAS(yourKey);
String e = "台新金控12月3日將召開股東臨時會進行董監改選。";
c.setContent(e);
c.send();
//System.out.println(c.getContent());
//String[] s = c.getSentence();
System.out.println(c.getReturnText());
for (Term t : c.getTerm()) {
System.out.println(t.getTerm() + "," + t.getTag());
}
輸出為
run:
台新金控12月3日將召開股東臨時會進行董監改選。
台新,PROPER_NOUN
金控,NOUN
,null
12,null
,null
月,NOUN
,null
3,null
,null
日,PROPER_NOUN
將,ADVERB
召開,VERB
股東,NOUN
臨時會,NOUN
進行,VERB
董監,NOUN
改選,VERB
。,null
BUILD SUCCESSFUL (total time: 0 seconds)

wenh123

unread,
Mar 20, 2009, 11:00:07 PM3/20/09
to ckipclient
請問要如何啟動Yahoo 的api key ?
謝謝

onlinemad

unread,
Mar 21, 2009, 3:09:48 AM3/21/09
to ckipclient
用瀏覽器

http://asia.search.yahooapis.com/cas/v1/AuthBootUp.php?appid=yourapikey

會收到一個啟動成功的 xml 訊息

wenh123

unread,
Mar 21, 2009, 4:31:13 AM3/21/09
to ckipclient
太好了 可以跑了
但是我將e 的字串改為英文的"This is a book"
得到的結果如下:
This is a book.This,null
,null
is,null
,null
a,null
,null
book,null
.,null

Yahoo 的這個API 不是也可以處理英文的嗎?
謝謝您的協助

onlinemad

unread,
Mar 21, 2009, 5:07:01 AM3/21/09
to ckipclient
函式庫是用Yahoo的「ws 斷詞與詞性標註(Word Segmentation)」
http://asia.search.yahooapis.com/cas/v1/ws
說明是有支援「ws: 斷詞與詞性標註。目前支援中文、日文、韓文、德文與英文。」

我剛試了一下
將字串換成「英文、中文、日文、德文」
String e = "This is a book.這是一本書,これは本だ,이 책이있다,Dies ist ein Buch";

輸出
This,null


,null
is,null
,null
a,null
,null
book,null
.,null

這,DETERMINER
是,VERB
一,NUMERAL
本,QUANTIFIER
書,NOUN
,,null
これ,NOUN
は,POSTPOSITION
本,NOUN
だ,AUXILIARY
,,null
이,ADVERB
,null
책이,NOUN
있다,SUFFIX
,,null
Dies,null
,null
ist,null
,null
ein,null
,null
Buch,null


我想支援英文應該是可以斷英文的「空格」吧

但是因為無法對英文進行詞性標記,所以第二的欄位會出現「null」

至於日文、韓文看來是可以的

Reply all
Reply to author
Forward
0 new messages