我將獲取用中文書寫的文檔,我必須標記並保存在數據庫表中。我正在嘗試Lucene的CJKBigramFilter,但它所做的只是將兩個字符合並在一起,因爲它們的含義與文檔中的含義不同。假設這是文件「Hello My name is Pradeep」中的一行,在中國傳統中是「你好我的名字是普拉迪普」。當我標記它時,它將轉換爲下面的2個字母的單詞。 你好 - 你好 名字 - 命名 好我 - 嗯,我 字是 - 字是 我的 - 我的 拉迪 - 拉迪 是普 - 是對S & P 普拉 - 普拉 的名 - 在迪普 - 迪普的名字 。 我只需要將它轉換成相同的英文翻譯。 我爲此使用Lucene ...如果您有任何其他有利的opne資源,請直接告訴我。 預先感謝如何標記中文文檔
Q
如何標記中文文檔
4
A
回答
3
雖然可能爲時已晚,但您可以試試U-Tokenizer這是一個在線API,它可以免費使用。 見http://tokenizer.tool.uniwits.com/
3
如果你想要一個完全成熟的NLP解析器,結賬出來http://nlp.stanford.edu
如果你想爲中國的一個簡單的,一次性的解決方案,這是我用什麼。
首先將中文字典加載到Trie(前綴樹)中以減少內存佔用量。然後,我在字典中查看字符,觀察詞典中存在的枯萎子串。如果他們這樣做,我會把它解析爲一個令牌。該算法可能會大大改善,但這對我來說很好。 :)
public class ChineseWordTokenizer implements WordTokenizer {
private static final int MAX_MISSES = 6;
// example implementation: http://www.kennycason.com/posts/2012-03-20-java-trie-prefix-tree.html
private StringTrie library;
private boolean loadTraditional;
public ChineseWordTokenizer() {
this(true);
}
public ChineseWordTokenizer(boolean loadTraditional) {
loadLibrary();
this.loadTraditional = loadTraditional;
}
@Override
public String[] parse(String sentence) {
final List<String> words = new ArrayList<>();
String word;
for (int i = 0; i < sentence.length(); i++) {
int len = 1;
boolean loop = false;
int misses = 0;
int lastCorrectLen = 1;
boolean somethingFound = false;
do {
word = sentence.substring(i, i + len);
if (library.contains(word)) {
somethingFound = true;
lastCorrectLen = len;
loop = true;
} else {
misses++;
loop = misses < MAX_MISSES;
}
len++;
if(i + len > sentence.length()) {;
loop = false;
}
} while (loop);
if(somethingFound) {
word = sentence.substring(i, i + lastCorrectLen);
if (StringUtils.isNotBlank(word)) {
words.add(word);
i += lastCorrectLen - 1;
}
}
}
return words.toArray(new String[words.size()]);
}
private void loadLibrary() {
library = new StringTrie();
library.loadFile("classify/nlp/dict/chinese_simple.list");
if(loadTraditional) {
library.loadFile("classify/nlp/dict/chinese_traditional.list");
}
}
}
這裏是一個單元測試
public class TestChineseWordTokenizer {
@Test
public void test() {
long time = System.currentTimeMillis();
WordTokenizer tokenizer = new ChineseWordTokenizer();
System.out.println("load time: " + (System.currentTimeMillis() - time) + " ms");
String[] words = tokenizer.tokenize("彈道導彈");
print(words);
assertEquals(1, words.length);
words = tokenizer.tokenize("美國人的文化.dog");
print(words);
assertEquals(3, words.length);
words = tokenizer.tokenize("我是美國人");
print(words);
assertEquals(3, words.length);
words = tokenizer.tokenize("政府依照法律行使執法權,如果超出法律賦予的權限範圍,就是「濫用職權」;如果沒有完全行使執法權,就是「不作爲」。兩者都是政府的錯誤。");
print(words);
words = tokenizer.tokenize("國家都有自己的政府。政府是稅收的主體,可以實現福利的合理利用。");
print(words);
}
private void print(String[] words) {
System.out.print("[ ");
for(String word : words) {
System.out.print(word + " ");
}
System.out.println("]");
}
}
這裏是結果
Load Complete: 102135 Entries
load time: 236 ms
[ 彈道導彈 ]
[ 美國人 的 文化 ]
[ 我 是 美國人 ]
[ 政府 依照 法律 行使 執法 權 如果 超出 法律 賦予 的 權限 範圍 就是 濫用職權 如果 沒有 完全 行使 執法 權 就是 不 作爲 兩者 都 是 政府 的 錯誤 ]
[ 國家 都 有 自己 的 政府 政府 是 稅收 的 主體 可以 實現 福利 的 合理 利用 ]
+0
嗨,Kenny!我想嘗試解決您的解決方案,並將其性能與當前的標記器進行比較。你能指點我在哪裏尋找一個可用的字典嗎?我沒有在你的github存儲庫以及stanford nlp數據中找到它...非常感謝! – wojtuch
相關問題
- 1. 文檔標記
- 2. 如何在MongoDB中標記文檔?
- 3. 如何連接標記文檔
- 4. 如何標記C#XML文檔
- 5. 如果文檔中不存在單詞,該如何標記文檔?
- 6. 如何將文本置於腳本標記中的文檔內?
- 7. Word文檔。替換標記
- 8. 如何讓xml文檔進入xml標記並在文檔中使用
- 9. vim幫助文件標記的文檔
- 10. 如何標記一個html文檔以顯示何時創建/更新文檔?
- 11. 如何從java中的XML文檔中刪除XML標記
- 12. 如何在Enterprise Architect文檔中隱藏標記的值
- 13. 如何使用mongodb從html文檔中刪除html標記
- 14. 如何在Nokogiri中使用「doc」標記來構建XML文檔
- 15. 如何在RadRickTextBox中標記文檔ReadOnly的原始部分
- 16. iPhone:如何從文檔中獲取PDF文檔的標題?
- 17. 如何搜索文檔mongoosejs中的標籤文檔?
- 18. 將可可基於文檔的文檔標記爲髒
- 19. Elasticsearch如何匹配文檔的字段標記是查詢標記的子集
- 20. 將HTML標記轉換爲RTF文檔
- 21. 無形標記了一個word文檔
- 22. 沒有XML標記與SimpleXML DOM文檔
- 23. 標記語言的文檔規範?
- 24. 自動文檔標記相關
- 25. jQuery標記或徽章文檔
- 26. Javascript DOM從標記源文檔createElement
- 27. 語義標記的文檔塊響應
- 28. clojure中記錄的文檔
- 29. 如何記錄整個svg文檔?
- 30. 如何在文檔標記中啓用鼠標點擊簽名功能
此信息可能會有所幫助http://stackoverflow.com/questions/7626912/how -does-tokenization-and-pattern-matching-work-in-chinese –
這是完全不同的意義,斯坦福擁有自己的設置標記中文字符,我不能使用,因爲我使用的是Lucene。我只是想知道,在Lucene中,我怎麼能象我在問題描述中所描述的那樣標記中文字符。 – Pradeep