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