java - 使用人类语言词典动态填充 HashMap 以进行文本分析

标签 java dictionary hashmap nlp

我正在编写一个软件项目,以人类语言的文本作为输入并确定它是用什么语言编写的。

我的想法是,我将在 HashMap 中存储字典,以单词作为键,以 boolean 值作为值。

如果文档中有这个词,我会将 boolean 值翻转为 ture。

现在我正在尝试想一个好方法来读取这些字典,将它们放入 HashMap 中,我现在这样做的方式非常天真,看起来很笨拙,有没有更好的方法来填充这些字典 HashMap ?

而且,这些词典非常庞大。也许这不是最好的方法,即像这样连续填充它们。

我在想,最好一次只考虑一本字典,然后创建一个分数,即输入文本中有多少单词与该文档注册,保存它,然后处理下一本字典。这会节省 RAM,不是吗?这是一个好的解决方案吗?

到目前为止的代码如下所示:

static HashMap<String, Boolean>  de_map = new HashMap<String, Boolean>();
static HashMap<String, Boolean>  fr_map = new HashMap<String, Boolean>();
static HashMap<String, Boolean>  ru_map = new HashMap<String, Boolean>();
static HashMap<String, Boolean> eng_map = new HashMap<String, Boolean>();

public static void main(String[] args) throws IOException
{
    ArrayList<File> sub_dirs = new ArrayList<File>();

    final String filePath = "/home/matthias/Desktop/language_detective/word_lists_2";

    listf( filePath, sub_dirs );

    for(File dir : sub_dirs)
    {
        String word_holding_directory_path = dir.toString().toLowerCase();



        BufferedReader br = new BufferedReader(new FileReader( dir ));
        String line = null;
        while ((line = br.readLine()) != null)
        {
            //System.out.println(line);
            if(word_holding_directory_path.toLowerCase().contains("/de/") )
            {
                de_map.put(line, false);    
            }
            if(word_holding_directory_path.toLowerCase().contains("/ru/") )
            {
                ru_map.put(line, false);
            }
            if(word_holding_directory_path.toLowerCase().contains("/fr/") )
            {
                fr_map.put(line, false);
            }
            if(word_holding_directory_path.toLowerCase().contains("/eng/") )
            {
                eng_map.put(line, false);
            }
        }
    }

因此,我正在寻求关于如何一次填充它们的建议,以及关于这是否是一种好的方法的意见,或者关于实现这一目标的可能更好的方法的建议。

完整的程序可以在 here on my GitHub page 找到.

27

最佳答案

语言识别的任务已经得到了很好的研究,并且有很多好的库。 对于 Java,请尝试 TIKA ,或Language Detection Library for Java (他们报告“53 种语言的精度超过 99%”),或 TextCat ,或LingPipe - 我建议从第一开始,似乎有最详细的教程。

如果您的任务对于现有库来说过于具体(尽管我怀疑情况是否如此),请参阅此 survey paper并采用最接近的技术。

如果你确实想重新发明轮子,例如出于自学目的,请注意识别可以被视为文本分类的特殊情况,并阅读此基本 tutorial for text classification .

关于java - 使用人类语言词典动态填充 HashMap 以进行文本分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30278100/

相关文章:

java - OSGI knopflerfish 缺少软件包或无法解析所有软件包

c# - 按键排序字典?

python - 从 2 元组列表创建字典

c - C中具有不同数据类型的键值

java - 如何对 HashMap<String, Integer[]> 进行排序?

java - 在Java中,是否有必要在InterruptedException之后调用unlock,还是应该避免unlock?

java - 拆分从android发送到php的嵌套数组

java - 更新 C3PO JDBC url 有什么影响?

python - 将字典列表转换为唯一的字典列表

java - 从另一个类访问 HashMap 数据时出现问题