日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java对字符串归一化_搜索引擎中的字符串归一化 | 学步园

發布時間:2025/3/15 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java对字符串归一化_搜索引擎中的字符串归一化 | 学步园 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搜索引擎中對于Q查詢,都會涉及到字符串歸一化這個步驟,以提高結果召回率。字符串的歸一化包括三個方面:繁體轉簡體;全角字符轉半角;大寫字母轉小寫。

建倒排時,會先對字符串做歸一化處理,然后再分詞取term;用戶查詢時,也會對查詢串做同樣的操作,這樣就能找到對應的倒排鏈。

在返回查詢結果給前端時,會按照查詢串對原文做飄紅,這里就涉及到一個問題,原文是沒有歸一化的;為了解決這個問題,我們自己寫了個normalize_strstr,如下:

char* normalize_strstr(const char *src, int srclen,

const char *key, int keylen, int *outsize){

unsigned short srcword = 0, keyword = 0;

int srcpos = 0;

do {

int tmppos = srcpos;

int keypos = 0;

do {

keyword = get_utf8_word(key, keylen, &keypos);

if(keyword == 0) {

*outsize = tmppos - srcpos;

return (char*)(src + srcpos);

}

srcword = get_utf8_word(src, srclen, &tmppos);

if(srcword == 0) {

return NULL;

}

}while(TOLOWER(g_uni_normal_map[keyword]) ==??? // compare key with substr

TOLOWER(g_uni_normal_map[srcword]));??? // normal map doesn't convert upper case to lower

} while(get_utf8_word(src, srclen, &srcpos) != 0);? // move forward one utf8 character

return NULL;

}

關于gbk, gb18030, utf8, unicode等問題,可以參見: http://www.cnblogs.com/xiaomia/archive/2010/11/28/1890072.html 。

幾個關鍵點:gbk都是雙字節;gb18030大多都是雙字節,有少量4字節;unicode為世界上每個字指定一個編碼,目前還沒有超出2字節; utf8是對unicode的編碼,以便于傳輸,目前有1字節,2字節,3字節,4,5,6字節,中文大多落在3字節。所以中文用utf8存儲,比gbk存儲要多出50%空間。另外strstr系列函數,對gbk是不安全的,即第一個字符的第二個字節,和第二個字符的第一個字節,可能是另外一個漢字。但utf8對strstr就是安全的,浪費一些空間,讓每個byte的前綴不同。

編碼轉碼相關的代碼,可以參考:http://code.google.com/p/pycode-hz/ 。 這是py的作品,簡潔明了,看看就知道編碼究竟是怎么回事。不過效率的話,這里的編碼轉換性能,不如系統自帶的iconv高。

總結

以上是生活随笔為你收集整理的java对字符串归一化_搜索引擎中的字符串归一化 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。