使用人类语言字典动态填充hashmap以进行文本分析

时间:2015-05-16 16:29:49

标签: java dictionary hashmap nlp

我正在编写一个软件项目,将人类语言中的文本作为输入,并确定它所使用的语言。

我的想法是,我要将字典存储在哈希图中,将单词作为键,将bool作为值。

如果文件中有这个词,我会将bool翻转为真。

现在我正在尝试一种阅读这些词典的好方法,将它们放入哈希图中,我现在这样做的方式非常天真,看起来很笨,是否有更好的方法来填充这些词典包含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

1 个答案:

答案 0 :(得分:1)

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

如果你的任务对于现有的库来说太具体了(尽管我怀疑是这种情况),请参考这个survey paper并调整最接近的技术。

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