2013-03-14 64 views
1

我有包含“字典单词”和名称的英文和德文文本。文本解析:区分“字典单词”和名称

例如“...在佛罗伦萨画家莱昂纳多建造...”

我有一个Java程序需要确定每个单词是否是一个名称或单词的各自的语言。

例如名称= {...,佛罗伦萨,莱昂纳多,...},语言中的单词= {...,在,在,画家,建,...}

我看到两种方法:

  1. 使用相应的字典列表,将其加载到散列结构中,查看该单词是否在其中(语言单词)或不是(名称/拼写错误)。

    问题/问题:

    我找不到这里的名字被排除

    字flexions一个德语单词列表(在德国复杂的)可能无法在列表中

  2. 使用服务/ api将单个单词翻译成另一种语言,查看该单词是否被更改(语言单词)或不是(名称/拼写错误)。

    问题/问题:

    名称可能被翻译为好,例如佛罗伦萨> Florenz

    我找不到离线词典列表/ api。所以我认为使用在线服务是一条可行的路线,但像谷歌翻译这样的大公司并不是免费的。

当然,有些名称与词典词相似,在两种方法中它们都被识别为词典词,它们都很好。

主要问题是:英语和德语中是否存在没有名称的综合字典列表,充其量还有词语弯曲?

或者: 有没有一个免费的(在线)API来完成这项任务?还有其他解决方案吗?

+0

我想通过测试它是否在字典或其他任何集合中来测试一个单词是否是一个名字在计算上会花费相当大的代价。也许有一个启发式,你可以申请测试,如果一个单词可能是一个名字... – souldzin 2013-03-14 17:01:59

+0

我知道一个正在研究这个问题的人(德语语法分析和语法,他必须从单词中识别名字)作为他的AI博士..所以我不认为有任何简单的方法.. – 2013-03-14 17:10:47

+0

@SoulDZIN它没关系,如果它快速完成。此外,查找散列中的单词,例如哈希集合,即使充满了万字,也非常快。 – shokkokkok 2013-03-14 17:10:50

回答

0

您可以通过检查第一个字母是否为大写字母来查找很多名称。之后,你将排除所有跟踪结束符的字符{“。”,“!”,“?”}。

假设它更多的是一个故事,假设一个名称会出现多次是非常安全的。使用你已经找到的所有名字,并将它们对照在句尾结束后出现的所有大写单词列表进行检查。添加那些平等的人。

第二部分应该只在你想要每一次发生而不只是发生的时候完成。

至少,我就是这么想的。

编辑:我对德语不太熟悉,但我的方法确实会对德语有一些问题。请参阅Joop Eggen针对该语言的解决方案。

0

是的德语是一个问题,因为非名词名词也是大写。

虽然有一种语言属性。尽管可以说“美丽的佛罗伦萨”(“dasschöneFlorenz”),但对于个人名称,前面的文章/形容词的用法非常罕见。也可以考虑复数的例外“Müllers”(“Müllers”)。

所以你只需要一个地理名称等列表。

并检测前面的文章/形容词(der/die/das/...和-e/-en/-...)。

+0

我不是在寻找解析短语,而是单个孤立的单词。因此,在您的示例中,如果算法将“the”标识为语言词并将“Müllers”标识为名称,那么这将是可以接受的,这正是没有名称的字典哈希的用法将实现的。 – shokkokkok 2013-03-14 17:16:30

+0

另一方面,“Müller”(miller)将被识别为字典单词,这很好。 – shokkokkok 2013-03-14 17:28:34

+0

对不起,祝你好运。 – 2013-03-14 17:42:27