做中文查詢糾錯,需要乙個拼音到中文詞彙的對應表。網上找不到,只要利用baidu來構建乙個。
原理:難點是多音字。輸入乙個詞,根據拼音漢字表,可以得到其搜有發音,比如「銀行」的發音有可能有 「yinhang」, 「yinxing」,哪乙個才是對的呢?
傳送 get 請求到 to baidu.com,
""從搜尋結果可以得到,
您要找的是不是: 銀行 ,
這樣就可以知道」 yinhang「是」銀行「正確的發音。
步驟1. 利用拼音漢字表, 構造 漢字->拼音 hash 表。
2. 對詞表的每乙個詞彙,得到所有的拼音候選。如果只有乙個,就是得到乙個結果。
如果有多個發音,到步驟3。
3. 傳送 get 請求到 to baidu.com, "" (候選拼音)
4. 分析返回結果,得到正確的發音。
注意,由於傳送get到baidu太慢,採用用200個執行緒,
下面是python**
#編碼轉換
def transcode(s):
try:
encode_dict = chardet.detect(s)
if encode_dict["encoding"] == "gb2312" :
s = unicode(s,"gb18030").encode("utf-8")
if encode_dict["encoding"] == "gbk" :
s = unicode(s,"gb18030").encode("utf-8")
if isinstance(s, unicode):
s = s.encode('utf-8')
return s
except:
return s
pinyin_map = dict();
#構造拼音詞彙表,因為拼音詞彙**式可能不一樣,所以省略
def generate_pinyin_map():
#省略def generate_synonym_worker( input_file, out_file, idx ):
f = open(input_file+"_"+str(idx), 'r')
of = open(out_file+"_"+str(idx), 'w+')
of.seek(0, 2)
idx = 0
for eachline in f:
idx += 1
try:
eachline = unicode(eachline,'utf-8')
eachline = eachline[:-1]
words = re.split(u' +', eachline)
pinyin = generate_pinyin_canadiate(words[0], of)
except:
pass
f.close()
of.close()
#兩百個執行緒
num_worker = 200
#map
def split(input_file):
f = open(input_file, 'r')
files =
for idx in range(num_worker):
idx = 0
for eachline in f:
idx += 1
files[idx%num_worker].write(eachline)
for onefile in files:
onefile.close()
#reduce
def merge(out_file):
outf = open(out_file, 'w+')
files =
for idx in range(num_worker):
file_name = out_file+"_"+str(idx)
f = open(file_name, 'r')
for eachline in f:
outf.write(eachline)
f.close()
outf.close
#產生拼音詞彙表
def generate_synonym(input_file, out_file):
split( input_file )
thread_pool =
for i in range(num_worker):
th = threading.thread(target=generate_synonym_worker, args=(input_file, out_file ,i) ) ;
# start threads one by one
for i in range(num_worker):
thread_pool[i].start()
#collect all threads
for i in range(num_worker):
threading.thread.join(thread_pool[i])
merge(out_file)
#列舉所有的拼音組合
def listlist_enumerate(listlist, count):
result =
if count <= 0:
return result
if count == 1:
for item in listlist[0]:
aa =
else:
pre_result = listlist_enumerate(listlist, count-1)
result =
for one in pre_result:
for item in listlist[count-1]:
bb = list(one)
return result
def makeutf8(s):
#escape = re.compile(r'[\x00-\x17\\"\b\f\n\r\t]')
escape = re.compile(r'[\x00-\x1f]')
escape_dct = {}
for i in range(32):
escape_dct.setdefault(chr(i), ' ')
#escape_dct.setdefault(chr(i), '\\%02x' % (i,))
#escape_dct.setdefault(chr(i), '^%c' % (ord('@')+i) )
def replace(match):
return escape_dct[match.group(0)]
s = escape.sub(replace, s)
if isinstance(s, unicode):
s = s.encode('utf-8')
return s
def generate_pinyin_canadiate(chinese_word,fd):
listlist =
for uchar in chinese_word:
if pinyin_map.has_key(uchar) and len(pinyin_map[uchar]):
else:
listlist = listlist_enumerate(listlist, len(listlist))
for alist in listlist:
canadiate = ''.join(alist)
canadiate = canadiate.lower()
print canadiate
query = ""
try:
query = urllib.urlencode()
except:
pass
url = ''%(query)
search_results = urllib.urlopen(url).read()
search_results = transcode(search_results)
print url, canadiate #, search_results
r_suggest = re.compile('"
else:
run(args[0], args[1]);
高效利用百度
中的東西吧?這樣有幾個好處 1 搜尋越來越注重 每天晚上到3點多我還在更新,別說他們這些大型 是夠 的,深夜還在更新,我靠 不過也正是如此這一片文章給我每天帶來了1300多的ip所以以後我變更加堅定我的想法。實在大多數情況下,登入搜尋引擎可不是宣傳和推廣你 的唯一手段。要取得真正的成功,你還需要使用...
利用百度介面
1.先取出我的車輛的id 和 modelname 3.解析json 遍歷裡面的data 拿到objurl 4.對objurl 進行解密 5.檢測解密後的objurl 的可用性 6.獲取可用的objurl 到本地 jsonresult str replace jsonresult 返回來的json資料...
利用百度雲盤API上傳檔案至百度雲盤
一 獲取access token示例 1.請您將以下http請求直接貼上到瀏覽器位址列內,並按下回車鍵。4 請將此頁面位址列的內容拷貝出來,您將看到 session secret 9deaa587f9cd177f02079506dc4391ab session key 94rrnl7qf2cyvns...