开源英文词库
·
0 申明
- 英文词库项目来自 github、我fork了一下。
- 词库文件是基于csv的词库文本文件,具体的可以去github主页去观看
- 项目作者为这个csv文件编写了一个常见语言和数据库的处理接口
1 csv文件格式详解
完整的词库非常大 (222MB)UTF-8编码 请勿用excel打开 词库采用了csv文件的格式来存储单词文件,使用者可以看得见,摸得着! 文本较大、是文本编辑器打开即可看到文件夹的格式。csv文件格式下去自行百度、csv类似于数据库和excel的格式!
下面是词库csv文件的具体格式 加?的是我在项目中没用到的或者我认为没啥用的
word 单词名称
phonetic 音标,以英语英标为主
definition 单词释义(英文),每行一个释义
translation 单词释义(中文),每行一个释义
pos 词语位置,用 "/" 分割不同位置 这个字段我看貌似没啥意思 ?
collins 柯林斯星级 ?
oxford 是否是牛津三千核心词汇 ?
tag 字符串标签:zk/中考,gk/高考,cet4/四级 等等标签,空格分割
bnc 英国国家语料库词频顺序 ?
frq 当代语料库词频顺序 ?
exchange 时态复数等变换,使用 "/" 分割不同项目,见后面表格
detail json 扩展信息,字典形式保存例句(待添加) 这个在csv为空
audio 读音音频 url (待添加) 这个在csv为空
可以看到项目中词库内容是很全面的
中文释义应该说非常的全面、核心的常见单词其英文释义基本上都有 上述的csv文件还包含短语,缺少英文的例句和发音
例句除了使用爬虫爬取、在线API(如有道在线API…)外我没有发现有啥其他的好办法。 单词发音的这个问题很好解决 参见这个博客的在线发音API接口 https://blog.csdn.net/xj853663557/article/details/82735900
重点讲一下音频的获取,以上图的链接接口为例
https://ssl.gstatic.com/dictionary/static/sounds/oxford/somewords–_gb_1.mp3
替换链接的somewords为需要的单词 注意:1 全小写 2 不支持空格 使用的2种方法
- 在线音频的获取
在android端测试时、 我是用MediaPlayer实现的在线播发,效果非常的好
贴出源代码:
package cn.adminzero.helloword.util;
import android.media.MediaPlayer;
import android.text.TextUtils;
import android.util.Log;
/**
* author : zhaojunchen
* date : 2019/11/1811:43
* desc : https://blog.csdn.net/xj853663557/article/details/82735900 src detail
* 音频播放器类
* 多线程适用-->在子线程播放音频 避免卡死
* MediaPlayUtil player = new MediaPlayUtil();
* player.playword(String word); // 播放单词
*/
public class MediaPlayUtil {
// 音频链接获取
private static final String TAG = "MediaPlayUtil";
private MediaPlayer mediaPlayer = null;
private static String getUrl(String word) {
return "https://ssl.gstatic.com/dictionary/static/sounds/oxford/" + word + "--_gb_1.mp3";
}
public MediaPlayUtil() {
mediaPlayer = new MediaPlayer();
}
// 单词发音
public boolean playword(String word) {
if (TextUtils.isEmpty(word)) {
Log.d(TAG, "playword: " + "单词确缺失");
return false;
}
final String url = getUrl(word.trim().toLowerCase());
new Thread(new Runnable() {
@Override
public void run() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
return true;
}
}
使用方法
MediaPlayUtil mediaPlayUtil = new MediaPlayUtil();
mediaPlayUtil.play("yes");
mediaPlayUtil.play("no");
- 下载离线的音频MP3
下载方法: 不许使用爬虫 、 使用linux 的wget即可
详细介绍 首先拿到待下载单词的拼写、替换掉链接的somewords、得到新的连接,将连接批量的写到文本文件(一行一个链接) 使用
wget -i url.txt -P ./downloadpath -i 指定url集合的文件 -P指定下载文件夹
2 csv文件解析
- 实现快速解析,需要干掉逗号! 在csv文件里面 字符串里面是可能存在逗号的,这个和分隔符是冲突的 所以会在字符串加上" xxxxx,xxxxx" 区分逗号 如何识别分号包包装的逗号和作为分割的都号?
首选替换逗号为一个不出现的字符一个在csv文件里面的字符 (这里面我是用的#) 对文件预处理、替换逗号
/**
* 对开源词库预处理
* 输入 原文件路径 --> 目的文件路径
*/
public static void preparecsv(String filename, String filename_des) throws Exception {
File csv = new File(filename); // CSV文件路径
FileWriter fw = new FileWriter(filename_des);
BufferedReader br = new BufferedReader(new FileReader(csv));
StringBuffer stringBuffer = new StringBuffer();
StringBuffer temp = new StringBuffer();
String line = null;
String tempstring = null;
String[] tempbuffer;
String splitstring = Character.toString(splitsymbol);
char ch;
int i, isclose;
long count = 1;
//* 添加正确的分隔符和id标识*//*
try {
while ((line = br.readLine()) != null) {
line = String.valueOf(count) + "," + line;
count++;
isclose = 0;
temp.setLength(0);
for (i = 0; i < line.length(); i++) {
ch = line.charAt(i);
if (ch == '"') {
isclose = (isclose + 1) % 2;
} else if (ch == ',' && isclose == 0) {
ch = splitsymbol;
temp.append(ch);
} else if (ch == splitsymbol) {
} else {
temp.append(ch);
}
}
/**
* 舍弃短语
* */
tempstring = temp.toString();
tempbuffer = tempstring.split(splitstring, -1);
if (tempbuffer.length != 14) {
System.out.println("error");
continue;
}
tempstring = tempbuffer[1].trim();
if (tempstring.contains(" ")) {
continue;
}
temp.append("\n");
stringBuffer.append(temp);
}
fw.write(stringBuffer.toString());
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
下面的代码使用tag字段的值筛选出来zk gk cet4 cet6 … 到新的文件
其他的处理使用相同的模板类型模板
public static void wordall(String A, String B) throws Exception {
File file = new File(A); // CSV文件路径
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
StringBuffer stringBuffer = new StringBuffer();
int position = 8; //单词类型在csv的位置
int count = 0;
String[] buffer;
String splitstring = Character.toString(splitsymbol);
String buffer0, buffer1, buffer2, buffer3, buffer4, buffer8, buffer11;
/**
* wordid,word,phonetic,definition,translation,pos,
* collins,oxford,tag,bnc,frq,
* exchange,detail,audio
* 0 1 2 3 4 11 8 (tag)
*/
short tag = 0;
StringBuffer onlyword = new StringBuffer();
try {
onlyword.setLength(0);
while ((line = br.readLine()) != null) {
buffer = line.split(splitstring, -1);
buffer8 = buffer[position].trim();
tag = 0;
if (buffer8.contains("zk")) {
tag |= tag_zk;
}
if (buffer8.contains("gk")) {
tag |= tag_gk;
}
if (buffer8.contains("cet4")) {
tag |= tag_cet4;
}
if (buffer8.contains("cet6")) {
tag |= tag_cet6;
}
if (buffer8.contains("toefl")) {
tag |= tag_toefl;
}
if (buffer8.contains("ielts")) {
tag |= tag_ielts;
}
if (buffer8.contains("gre")) {
tag |= tag_gre;
}
if (buffer8.contains("ky")) {
tag |= tag_ky;
}
if (tag == 0) {
continue;
}
count++;
//buffer0 = buffer[0].trim() + splitstring;
buffer0 = String.valueOf(count) + splitstring;
buffer1 = buffer[1].trim() + splitstring;
buffer2 = buffer[2].trim() + splitstring;
buffer3 = buffer[3].trim() + splitstring;
buffer4 = buffer[4].trim() + splitstring;
buffer11 = buffer[11].trim() + splitstring;
stringBuffer.append(buffer0);
stringBuffer.append(buffer1);
stringBuffer.append(buffer2);
stringBuffer.append(buffer3);
stringBuffer.append(buffer4);
stringBuffer.append(buffer11);
stringBuffer.append(String.valueOf(tag) + "\n");
}
} catch (IOException ex) {
ex.printStackTrace();
}
FileWriter fw = new FileWriter(B);
fw.write(stringBuffer.toString());
fw.close();
System.out.println(B + " items is " + count);
}
源代码地址 : csvanalyze
更多推荐
所有评论(0)