单词整理理工具
这个软件帮助将PDF中的内容转换成单独的单词,将这些单独的单词直接导入到背词软件中,就可以直接使用了。主要是自定义了相关的单词,解决现有词库的不匹配的问题
1. 界面
界面就是下图所示
1.按钮
2.文本框
3.列表框
基本逻辑就是:点击按键->弹出框->选择文件->整理后输出到文件。
2. 代码
这个是程序的入口,加载的时候,记录下程序运行的时间
C
private void Form1_Load(object sender, EventArgs e)
{
System.DateTime currentTime = new System.DateTime();
}
这个按键就是完整的处理代码,
C
//代码计时的全局变量,可以统计代码的运行时间,或者其他计时使用
private DateTime currentTime;
/// <summary>
/// 按键打开文件,打开文件后进行读取TXT
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Multiselect = true;//该值确定是否可以选择多个文件
dialog.Title = "请选择文件";
dialog.Filter = "txt格式(*.txt)|*.txt|所有文件|*.*";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string file = dialog.FileName;
//richTextBox1.AppendText(file + "\n");//显示路径,并且后面的叠加不删除
DateTime currentTime0 = System.DateTime.Now;//代码运行开始计时
//读取文件内容
System.IO.StreamReader sr = new System.IO.StreamReader(file, System.Text.Encoding.Default);
String ls_input = sr.ReadToEnd().TrimStart();
// richTextBox1.AppendText(ls_input + "\n");//显示内容
//将空格,回车,换行作为拆分标记
string[] tokens = ls_input.Split(new char[] { ' ','\r','\n',',','"', '“', '”','.',',', '?','!',':',';' }, StringSplitOptions.RemoveEmptyEntries);
richTextBox1.AppendText("去除前的长度" + tokens.Length + "\n");//显示内容
tokens = data_clearn(tokens);//清除重复值,
richTextBox1.AppendText("去除重复值的长度" + tokens.Length + "\n");//显示内容
tokens = DataCheck(tokens, ls_input);
richTextBox1.AppendText("check 后的单词" + tokens.Length + "\n");//显示内容
string saveName = textBox1.Text;
Save_Data(saveName, tokens);//保存单词
DateTime currentTime1 = System.DateTime.Now;
Debug.WriteLine("代码运行时间:" + (currentTime1 - currentTime0).ToString());
}
}
清除无效的字符
C
/// <summary>
/// 清除无效的字符
/// 1.非单词的字符
/// 2.长度小于3的字符
/// 3.重复的字符
/// </summary>
/// <param name="tokens"></param>
/// <returns></returns>
string[] data_clearn(string[] tokens)
{
//清除重复项目,文件大的话有100ms的优化
tokens = tokens.Distinct().ToArray();
//清理数据的循环
for (int i = 0; i < tokens.Length; i++)
{
//白名单,只保留特定字符
tokens[i] = Regex.Replace(tokens[i], @"[^A-Za-z-]+", "");
}
//因为去除符号后,有字符长度的变化,所以再次去除无效的长度
for (int i = 0; i < tokens.Length; i++)
{
if (tokens[i].Length < 3)//去除无效的长度
{
tokens[i] = "";
}
}
tokens = tokens.Where(str => str != "").ToArray();//去除空
//清除重复项目
tokens = tokens.Distinct().ToArray();
return tokens;
}
检查是否在tokens中
C
/// <summary>
/// check ls_input 是否在tokens中
/// </summary>
/// <param name="tokens"></param>
/// <param name="ls_input"></param>
/// <returns></returns>
string[] DataCheck(string[] tokens,string ls_input)
{
for(int i = 0;i<tokens.Length;i++)
{
if (ls_input.Contains(tokens[i])==false)
{
tokens[i] = "";
}
}
tokens = tokens.Where(str => str != "").ToArray();//去除空
return tokens;
}
保存数据
C
/// <summary>
/// 保存数据,同时添加时间信息
/// </summary>
/// <param name="daya_Path"></param>
/// <param name="SaveData"></param>
void Save_Data(string daya_Path,string[] SaveData)
{
currentTime = System.DateTime.Now;
int 年 = currentTime.Year;
int 月 = currentTime.Month;
int 日 = currentTime.Day;
int 时 = currentTime.Hour;
int 分 = currentTime.Minute;
int 秒 = currentTime.Second;
string time = 年.ToString() + "." + 月.ToString() + "." + 日.ToString() + "." + 时.ToString() + "." + 分.ToString() + "." + 秒.ToString();
daya_Path = time + daya_Path;
File.WriteAllLines(daya_Path, SaveData, Encoding.Default);
}