Skip to content

单词整理理工具

这个软件帮助将PDF中的内容转换成单独的单词,将这些单独的单词直接导入到背词软件中,就可以直接使用了。主要是自定义了相关的单词,解决现有词库的不匹配的问题

alt text

1. 界面

界面就是下图所示
1.按钮
2.文本框
3.列表框
alt text

基本逻辑就是:点击按键->弹出框->选择文件->整理后输出到文件。

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);

}