这篇文章是基于之前的百度语音识别集成到Fragment篇拓展来的,不会可以先点开看看。
首先先下载一个工具包链接:复制以下链接下载,名字如下
https://pan.baidu.com/s/1wgJof6E1t29OmSBFRxu_Cw 提取码:d0dz
然后就是导入这个工具包:有两种情况,新版本的AS导包的步骤不太一样,所以有两个情况的导包步骤;
先介绍旧版的导包方法:
1)把对应的jar包copy至\app\libs下; 2)在AS中jar包,右键菜单Add as Library. 3)检查下,gradle 文件中是否已包含了这个第三方类库:
最新版的导包方法:
1)首先File -> new -> new Module 2)选择import.JAR NEXT 3)找到刚刚下载的包的位置 4)FINISH ->自动刷新项目的 5)最后回到Gradle Scripts 打开build gradle(Module :app)看到有刚刚导入的包的名称就代表成功了
新增类文件Pinyin4jUtil,建立 应用类代码相应解析方法。
package com
.example
.login1
.fragment
;
import java
.util
.ArrayList
;
import java
.util
.Hashtable
;
import java
.util
.List
;
import java
.util
.Map
;
import net
.sourceforge
.pinyin4j
.PinyinHelper
;
import net
.sourceforge
.pinyin4j
.format
.HanyuPinyinCaseType
;
import net
.sourceforge
.pinyin4j
.format
.HanyuPinyinOutputFormat
;
import net
.sourceforge
.pinyin4j
.format
.HanyuPinyinToneType
;
import net
.sourceforge
.pinyin4j
.format
.exception
.BadHanyuPinyinOutputFormatCombination
;
public class Pinyin4jUtil {
public static String
converterToFirstSpell(String chines
) {
StringBuffer pinyinName
= new StringBuffer();
char[] nameChar
= chines
.toCharArray();
HanyuPinyinOutputFormat defaultFormat
= new HanyuPinyinOutputFormat();
defaultFormat
.setCaseType(HanyuPinyinCaseType
.LOWERCASE
);
defaultFormat
.setToneType(HanyuPinyinToneType
.WITHOUT_TONE
);
for (int i
= 0; i
< nameChar
.length
; i
++) {
if (nameChar
[i
] > 128) {
try {
String
[] strs
= PinyinHelper
.toHanyuPinyinStringArray(nameChar
[i
], defaultFormat
);
if (strs
!= null
) {
for (int j
= 0; j
< strs
.length
; j
++) {
pinyinName
.append(strs
[j
].charAt(0));
if (j
!= strs
.length
- 1) {
pinyinName
.append(",");
}
}
}
} catch (BadHanyuPinyinOutputFormatCombination e
) {
e
.printStackTrace();
}
} else {
pinyinName
.append(nameChar
[i
]);
}
pinyinName
.append(" ");
}
return parseTheChineseByObject(discountTheChinese(pinyinName
.toString()));
}
public static String
converterToSpell(String chines
) {
StringBuffer pinyinName
= new StringBuffer();
char[] nameChar
= chines
.toCharArray();
HanyuPinyinOutputFormat defaultFormat
= new HanyuPinyinOutputFormat();
defaultFormat
.setCaseType(HanyuPinyinCaseType
.LOWERCASE
);
defaultFormat
.setToneType(HanyuPinyinToneType
.WITHOUT_TONE
);
for (int i
= 0; i
< nameChar
.length
; i
++) {
if (nameChar
[i
] > 128) {
try {
String
[] strs
= PinyinHelper
.toHanyuPinyinStringArray(nameChar
[i
], defaultFormat
);
if (strs
!= null
) {
for (int j
= 0; j
< strs
.length
; j
++) {
pinyinName
.append(strs
[j
]);
if (j
!= strs
.length
- 1) {
pinyinName
.append(",");
}
}
}
} catch (BadHanyuPinyinOutputFormatCombination e
) {
e
.printStackTrace();
}
} else {
pinyinName
.append(nameChar
[i
]);
}
pinyinName
.append(" ");
}
return parseTheChineseByObject(discountTheChinese(pinyinName
.toString()));
}
private static List
<Map
<String, Integer>> discountTheChinese(String theStr
) {
List
<Map
<String, Integer>> mapList
= new ArrayList<Map
<String, Integer>>();
Map
<String, Integer> onlyOne
= null
;
String
[] firsts
= theStr
.split(" ");
for (String str
: firsts
) {
onlyOne
= new Hashtable<String, Integer>();
String
[] china
= str
.split(",");
for (String s
: china
) {
Integer count
= onlyOne
.get(s
);
if (count
== null
) {
onlyOne
.put(s
, new Integer(1));
} else {
onlyOne
.remove(s
);
count
++;
onlyOne
.put(s
, count
);
}
}
mapList
.add(onlyOne
);
}
return mapList
;
}
private static String
parseTheChineseByObject(
List
<Map
<String, Integer>> list
) {
Map
<String, Integer> first
= null
;
for (int i
= 0; i
< list
.size(); i
++) {
Map
<String, Integer> temp
= new Hashtable<String, Integer>();
if (first
!= null
) {
for (String s
: first
.keySet()) {
for (String s1
: list
.get(i
).keySet()) {
String str
= s
+ s1
;
temp
.put(str
, 1);
}
}
if (temp
!= null
&& temp
.size() > 0) {
first
.clear();
}
} else {
for (String s
: list
.get(i
).keySet()) {
String str
= s
;
temp
.put(str
, 1);
}
}
if (temp
!= null
&& temp
.size() > 0) {
first
= temp
;
}
}
String returnStr
= "";
if (first
!= null
) {
for (String str
: first
.keySet()) {
returnStr
+= (str
+ ",");
}
}
if (returnStr
.length() > 0) {
returnStr
= returnStr
.substring(0, returnStr
.length() - 1);
}
return returnStr
;
}
}
调用汉字转拼音库的convertToSpell方法,将bestResult转化成拼音字符串transformResult.
(注意:如果 没有自动导包则要手动将该拼音库进行导包)
建立私有方法Pinyinshibie(),然后调用,这个私有方法有多种实现方法可以自行修改
private void Pinyinshiibe(){
String pyResult
= Pinyin4jUtil
.converterToSpell(resultTxt
);
if(pyResult
.contains("nihao")&&pyResult
.contains("jizai")){
Log
.i(TAG
, "OK!! ");
}
}
要实现没有参数的方法,记得在顶部加上这句:
protected String resultTxt
= null
;
调用这个方法就可以实现拼音识别啦!
希望这篇文章对你有所帮助,觉得还可以点赞收藏喔!也还可以点个关注,你们的支持是对我最大的鼓励!!!