国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

離線語(yǔ)音識(shí)別編程示例

2018-12-21 17:56朱德平新疆烏魯木齊
數(shù)碼世界 2018年9期
關(guān)鍵詞:分詞搜索引擎示例

朱德平 新疆烏魯木齊

1.音頻處理

語(yǔ)音識(shí)別前,需要根據(jù)語(yǔ)音識(shí)別API的要求,對(duì)原始音頻文件進(jìn)行預(yù)處理,下面主要介紹音頻編碼轉(zhuǎn)換和語(yǔ)音分割兩項(xiàng)功能。

1.1 編碼轉(zhuǎn)換

語(yǔ)音識(shí)別API一般對(duì)語(yǔ)音文件的編碼算法、聲道數(shù)、采樣頻率、量化比特等參數(shù)有要求,因此需要對(duì)原始語(yǔ)音文件進(jìn)行編碼轉(zhuǎn)換,可以利用FFmpeg或者Pydub實(shí)現(xiàn)。FFmpeg是一個(gè)跨平臺(tái)的音視頻錄制、轉(zhuǎn)換、流化工具,其音頻編碼轉(zhuǎn)換的命令示例:

os.system("ffmpeg -i speech.mp3 -acodec pcm_s16le-ac 1 -ar 16000 speech.wav")

Python語(yǔ)言中將speech.mp3轉(zhuǎn)換成單聲道、16K采樣率、16量化比特的wav文件。

Pydub是Python的一個(gè)音頻庫(kù),提供了簡(jiǎn)單、易于使用的音頻編程接口,其中編碼轉(zhuǎn)換的示例:

from pydub import AudioSegment

speech = AudioSegment.from_mp3("speech.mp3")

speech.export("speech.wav", format="wav",parameters=["-ac", "1", "-ar", "16000"])

1.2 語(yǔ)音分割

由于語(yǔ)音識(shí)別API通常對(duì)語(yǔ)音的時(shí)長(zhǎng)有限制,例如不能超過(guò)60s等,因此需要對(duì)語(yǔ)音文件進(jìn)行分割,一般采用VAD進(jìn)行分割。VAD(語(yǔ)音激活檢測(cè),又叫語(yǔ)音端點(diǎn)檢測(cè)),是指通過(guò)對(duì)語(yǔ)音信號(hào)和噪聲信號(hào)的分析,區(qū)別語(yǔ)音區(qū)域和非語(yǔ)音區(qū)域,利用VAD進(jìn)行語(yǔ)音分割的基本思路是將語(yǔ)音分割成時(shí)長(zhǎng)10-30ms的幀,判斷每一幀是否是語(yǔ)音信號(hào)。 WebRTC VAD是VAD的一個(gè)常用實(shí)現(xiàn),py-webrtcvad是它的Python包裝庫(kù),代碼示例:

import webrtcvad

vad = webrtcvad.Vad()

sample_rate = 16000

result=vad.is_speech(frame, sample_rate)

其中frame是分割的幀,result為幀是否為語(yǔ)音的布爾值。

2.語(yǔ)音識(shí)別

百度AI開(kāi)放平臺(tái)支持離線語(yǔ)音識(shí)別,要求音頻文件單聲道、采樣率8K或16K,16位量化比特,文件格式是pcm、wav等。語(yǔ)音時(shí)間最長(zhǎng)60s。代碼示例:

from aip import AipSpeech

aipSpeech = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

with open(file_path, 'rb') as file:

speech_content = file.read()

result = aipSpeech.asr(speech_content, 'pcm', 16000, {'dev_pid': 1536})

if result["err_no"] == 0:

print("識(shí)別成功,文本是:{}".format(result["result"][0]))

else:

print("識(shí)別出錯(cuò):{}".format(result["err_msg"]))

其中APP_ID,、API_KEY,、SECRET_KEY注冊(cè)百度平臺(tái)和創(chuàng)建應(yīng)用時(shí)系統(tǒng)會(huì)創(chuàng)建和分配,file_path是語(yǔ)音文件名,dev_pid屬性設(shè)置語(yǔ)言類(lèi)型,1536為普通話識(shí)別,1537為英語(yǔ)識(shí)別。識(shí)別結(jié)果result為Json結(jié)構(gòu)的數(shù)據(jù),其中result["err_no"]若為0,代表識(shí)別成功,result["result"]是識(shí)別的1-5個(gè)候選結(jié)果,若result["err_no"]為其它數(shù)字,則表示識(shí)別出錯(cuò),result["err_no"]為錯(cuò)誤碼。

3.文本處理

3.1 模糊匹配

有些情況下,需要將識(shí)別出的語(yǔ)音文本和已有的文本進(jìn)行匹配,可以使用模糊匹配完成,一般使用Levenshtein編輯距離算法,Levenshtein距離是指兩個(gè)文本由一個(gè)轉(zhuǎn)換成另一個(gè)需要的最少編輯次數(shù),此處的編輯是指替換、插入和刪除操作。代碼示例:

import Levenshtein

max_distance = 30

distance = Levenshtein.distance(text1, text2)

if distance < max_distance:

print("匹 配 成 功, Levenshtein距 離 是:{}".format(distance))

else:

print("匹 配 不 成 功, Levenshtein距 離 是:{}".format(distance))

其中text1和text2是進(jìn)行匹配的文本,如果Levenshtein距離小于30,則認(rèn)為匹配成功,否則匹配失敗。

3.2 中文分詞

分詞就是將句子切分成一個(gè)一個(gè)詞匯,它是實(shí)現(xiàn)文本搜索、統(tǒng)計(jì)功能和自然語(yǔ)言處理等的基礎(chǔ),中文分詞的算法和庫(kù)都很多,這里介紹Jieba中文分詞庫(kù)。代碼示例:

import jieba

words = jieba.cut(text, cut_all=True)

print("全模式:{} ".format(words)))

words = jieba.cut(text, cut_all=False)

print("精確模式模式:{} ".format(words)))

words = jieba.cut_for_search(text)

print("搜索引擎模式:{} ".format(words)))

其中text為需要分解的文本,words為切分后的詞匯列表。分詞有三種分詞模式,精確模式、全模式、搜索引擎模式。精確模式是常用模式,適合文本分析,全模式是把所有可以成詞的詞匯都切分出來(lái),搜索引擎模式會(huì)對(duì)長(zhǎng)詞再次切分,適用于搜索關(guān)鍵字切分。

若需要對(duì)文本進(jìn)行進(jìn)一步的處理,可以使用NLP工具實(shí)現(xiàn)詞性標(biāo)注、命名實(shí)體識(shí)別、依存句法分析、語(yǔ)義角色標(biāo)注等自然語(yǔ)言處理功能。

猜你喜歡
分詞搜索引擎示例
Chrome 99 Canary恢復(fù)可移除預(yù)置搜索引擎選項(xiàng)
白描畫(huà)禽鳥(niǎo)(九)
分詞在英語(yǔ)教學(xué)中的妙用
世界表情符號(hào)日
結(jié)巴分詞在詞云中的應(yīng)用
結(jié)巴分詞在詞云中的應(yīng)用
10秒記憶
飛吧,云寶
基于Lucene搜索引擎的研究
搜索引擎,不止有百度與谷歌