利用百度構造拼音詞表 python

2021-08-26 18:32:02 字數 4571 閱讀 8900

做中文查詢糾錯,需要乙個拼音到中文詞彙的對應表。網上找不到,只要利用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...