需要首先說明的是,不同于以前的C++版提供的JNI調用,本次使用的是純Java版本的ICTCLAS,下載地址在http://ictclas.org/Down_OpenSrc.asp。
好,假設你已經下載了我們需要使用的Java版本ictclas4j,現在把它解壓縮,然后把Data文件夾整個拷貝到Eclipse項目的文件夾下,而bin目錄下的org文件夾整個拷貝到你Eclipse項目的bin目錄下,把src目錄下的org文件夾整個拷貝到Eclipse項目的src目錄下(最簡單快捷的使用方式,或者你自己打成jar包,這樣無論放到哪里,都可以在build path里面導入這個jar包啦)。
現在就可以在你的項目里新建一個類來試試。我新建了一個類,代碼如下:
import org.ictclas4j.bean.SegResult;
import org.ictclas4j.segment.SegTag;
public class OneMain {
public static void main(String[] args) {
System.out.println("This is OneMain");
SegTag st = new SegTag(1);
SegResult sr = st
.split("一塊勤奮地漂亮的一塊錢,/打造經濟的航空母艦。ABCD.#$% Hello World!\n又一段文本123輛 !3.0");
System.out.println(sr.getFinalResult());
}
}
很顯然文本“一塊勤奮地漂亮的一塊錢,/打造經濟的航空母艦。ABCD.#$% Hello World!"n又一段文本123輛 !3.0”就是我們用來測試的文本,其中包含了中文,英文,標點符號,亂七八糟符號(笑)及阿拉伯數字。
我們運行剛才的程序,看下輸出結果:
This is OneMain
一塊/s 勤奮/a 地/u 漂亮/a 的/u 一/m 塊/q 錢/n ,/w //nx 打造/v 經濟/n 的/u 航空母艦/n 。/w ABCD.#$%/nx Hello/nx World/nx !/w 又/d 一/m 段/q 文本/n 123/m 輛/q
看到了么,分詞的結果是一個長長的String類數據,用空格區分出每個詞,每個詞還用/后面的英文標號標出了詞性。一起來看看幾個有趣的地方。
原文中其實有兩個“一塊”,一處是“一塊勤奮”,這里很正確的識別為了副詞,而后面的“一塊錢”中的“一塊”也正確的識別為數量詞。
阿拉伯數字正確識別為數詞,包括小數形式的“3.0”。而英文和亂七八糟符號(包括那個不可見的換行符,你找到它在哪了嗎?)則都被劃為一類——/nx!(因為我也不知道ICTCLAS內部人員管它叫什么啦,非法字符啊,還是無效字符啊,或者其它字符啊,名字可以自己取嘛)
測試文本中還有兩個嘆號,一個是英文半角的!,一個是中文全角的!,兩者也都被正確識別為標點符號,但英文的句號“.“就被認為是/nx啦。
測試文本中的空格被完全忽略。
好,十分簡單對不對?去玩玩吧。
這個還是很不錯的
呵呵
你確定你運行成功了?為什么我會出現這個錯誤呢:
Exception in thread "main" java.lang.NullPointerException
at org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:571)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
at org.ictclas4j.segment.SegTag.split(SegTag.java:63)
at testjava.Testictclas4j.main(Testictclas4j.java:12)
以后可能還要多請你多指教啊
請教~ 急
我將OneMain.java放在哪里才能用呢?嗚嗚,新手,沒法使用啊,請您幫助下我吧,謝謝
org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:571)
org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
org.ictclas4j.segment.SegTag.split(SegTag.java:63)
請問你的問題解決了嗎?能幫我看下為什么么
ICTCLAS因為有一個賣錢的商業版,所以這個開源的版本毛病還是比較多的。比如有一些詞庫中不存在的詞,就會扔空指針的錯誤,比如“深圳”,“大阪”這樣的詞。
還有對一些特殊的字符串模式,比如單引號隔幾個字符再加一個什么什么的,就會報錯(年代有些久遠,記不太清了)。還有一些特殊的字符,也會報錯。如果不是很重視這些偏門的東西,建議還是修改一下源代碼,把這樣的異常屏蔽下就好。
data位置放錯了。。
java.lang.NullPointerException
at org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:571)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
at org.ictclas4j.segment.SegTag.split(SegTag.java:63)
請注意,本地的Application可以找到的資源,在Web服務器中未必找得到,所以請試著把ICTCLAS的詞典文件(也就是Data文件夾)放在正確的位置才可以。
謝謝。
恩,我前面也發現了應該是這個原因,甚至直接把data文件設為環境變量都不行。最后把data放在eclipse的安裝目錄下才可以。有辦法修改這默認資源路徑么?
Exception in thread "main" java.lang.NoClassDefFoundError: bean/FilesUtil
at org.ictclas4j.segment.SegTag.<init>(SegTag.java:33)
at OneMain.main(OneMain.java:11)
Caused by: java.lang.ClassNotFoundException: bean.FilesUtil
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 2 more
This is OneMain
我是新手 請教一下 為什么我用ICTCLAS4j
src下org.ictclas4j.bean有很多編譯錯誤
大部分是
ReflectionToStringBuilder cannot be resolved
和
The import org.apache cannot be resolved
另外不知道您是否測試過不開源的共享版 是否提供比較全面的詞庫?
我只想用它來分詞 完全是應用
非常感謝~
查看一下自己使用的JDK版本,保證JDK5以后.另外我沒有測試過非開源版的ICTCLAS,但是據他們的文檔和ICTCLAS4j的作者講,非開源的版本詞庫要全得多,速度也快得多。
我裝的是JDK6/ jre/ Eclipse/ XP
我仔細看了所有錯誤都是和ReflectionToStringBuilder有關
should be from:
import org.apache.commons.lang.builder.ReflectionToStringBuilder
但我沒有org.apache
不知道它是什么時候跟著什么安裝的 還是自己要額外安裝jar??
哦,需要一個Apache的commons的jar包,可以去www.apache.org找到。
去了apache.org上 但是不知道怎么找到我想要的jar呢
在下載頁那個非常長的目錄。。。
應該怎么找commons呢
這個本來就應該是手動安裝的么?
另外這個apache和 apache http server 有什么關系?
非常非常感謝偉大的Jasper同志~~
不好意思 又來麻煩請教~
我運行您的測試類之后也出現
This is OneMain
Exception in thread "main" java.lang.NullPointerException
at org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:571)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
at org.ictclas4j.segment.SegTag.split(SegTag.java:63)
at OneMain.main(OneMain.java:13)
文件位置應該都是正確的
我試了把文本里的中文字去掉之后 只剩下英文的時候就運行正常
用的是英文xp eclipse里已經在preference把text的encoding改成utf-8了。
不知道還可能是什么問題呢? 非常感謝~
不是的。
我運行了為什么總出現導入包的錯誤啊
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
SegTag cannot be resolved to a type
SegTag cannot be resolved to a type
SegResult cannot be resolved to a type
import語句一直都有問題哦
如果有遇到問題的朋友,請移步這里:
http://blog.csdn.net/zzljlu/archive/2010/06/17/5676053.aspx
多謝指點。
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
SegTag cannot be resolved to a type
SegTag cannot be resolved to a type
SegResult cannot be resolved to a type
java web java.lang.NullPointerException~
請問問題解決了么?
我是直接使用的jar包,用build path導入,也出現了空指針問題,難道我的data數據的位置也有問題?
Exception in thread "main" java.lang.NullPointerException
at org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:574)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:96)
at org.ictclas4j.segment.SegTag.split(SegTag.java:63)
at execute.SegmentWords.main(SegmentWords.java:15)
我的搜索引擎也是使用這個,從朋友那拷過來的,+詞庫。但沒有源碼,不知道開不開源?聽說是隱馬爾科夫模型。想探探。
如果你用Linux或者Mac,建議用Chinese Analyzer,我試了一下,可以用。
請問一下這個的1表示什么意思?我試了一下,其他的整數似乎也可以?有什么區別嗎?
@Jasper
能給我發一份ICTCLAS Java版嗎?這幾天官網下不了,網上有很多都是假的。
375513290@qq.com
謝謝!!!
你好,今天也碰到了和你同樣的問題。Data文件夾到底放在什么位置呢,樓主在上文中說到是Eclipse項目的文件夾下,在回復你的評論中又說剛才說錯了,但也一樣是Eclipse項目的文件下呀。。。
我用“Run as java application”就沒有問題,但啟動tomcat后就報你說的那個錯誤了。
我把Data放在了MyEclipse的項目文件夾下,又在tomcat的項目文件夾下放了一個,也不行。
不知是什么原因,謝謝了!
你好啊,時代有點久遠了,也不知道能不能有回復。我照著你說的也放在了eclipse的安裝目錄下,依然報錯。不知道樓主說的正確的位置指哪里啊。。。求助!
知道問題所在了,自問自答一下吧。把Data文件夾放在了tomcat安裝目錄的bin目錄下,就可以了!
新手求救
The import org.apache cannot be resolved
at org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:571)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
at org.ictclas4j.segment.SegTag.split(SegTag.java:63)
at OneMain.main(OneMain.java:15)
請問用eclipse開發android時怎么使用ictclas4j
如樓主所講已將 “Data文件夾整個拷貝到Eclipse項目的文件夾下,而bin目錄下的org文件夾整個拷貝到你Eclipse項目的bin目錄下,把src目錄下的org文件夾整個拷貝到Eclipse項目的src目錄下” 后
出現Exception in thread "main" java.lang.NullPointerException
怎么辦呢?
我這邊也提示 Exception in thread "main" java.lang.NullPointerException
at org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:618)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
at org.ictclas4j.segment.SegTag.split(SegTag.java:96)
at OneMain.main(OneMain.java:25)
不知道 是缺少了什么東西
at org.ictclas4j.bean.Dictionary.getMaxMatch(Dictionary.java:571)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
at org.ictclas4j.segment.SegTag.split(SegTag.java:63)
at OneMain.main(OneMain.java:15)
我這邊也提示 Exception in thread "main" java.lang.NullPointerException
at org.ictclas4j.bean. www.48yl.com Dictionary.getMaxMatch(Dictionary.java:618)
at org.ictclas4j.segment.GraphGenerate.generate(GraphGenerate.java:93)
at org.ictclas4j.segment.SegTag.split(SegTag.java:96)
at OneMain.main(OneMain.java:25)
我在網上下了一個ictclas4j,但總是分成一個字一個字的,如下:
打/g 造/g 經/g 濟/vg 的/vg 航/g 空/g 母/g 艦/g 。/g
我覺得是data文件不對~~