答案 1
不幸的是,您将无法可靠地从WordNet合成集中确定专有名词信息。您要查找的是命名实体识别。从维基百科页面可以获得Java中几个版本的链接。我个人会推荐Stanford NER或LingPipe。
更新:
基于为单词添加的无上下文约束,您可以使用大写作为主要指示符,然后仔细检查WordNet以查看该单词是否可以用作名词。也许是这样的:
String word = "foo";
boolean isProperNoun = false;
if (Character.isUpperCase(word.charAt(0))) {
WordNetDatabase database = WordNetDatabase.getFileInstance();
Synset[] synsets = database.getSynsets(word, SynsetType.NOUN);
isProperNoun = synsets.length > 0;
}
这将消除这样的误报:
如果你构建它...
如你所愿...
哦,罗密欧,罗密欧...
并且仍然只捕获大写的名词
在马可福音中,它说...
你最近听过《根源》或《谁》吗?
但仍然给你误报
标记第一个实例...
书,丹诺。
因为它们可能是,但没有上下文你不知道。
如果你想变得非常棘手,你可以跟进任何名词上的超名词树,看看你是否达到了像“公司”或“国家”这样明显的东西。但是,我上一次使用WordNet(4年前)时,超名/副名词关系不是很可靠或一致,这可能会导致很多假阴性(并且没有改善我上面提到的误报,因为这些是完全依赖于上下文的)。
答案 2
如果您使用linux命令行来使用Wordnet,则可以使用“wn -synsn”来获取单词的所有合成集。专有名词将大写。例如,
$: wn mark -synsn
Synonyms/Hypernyms (Ordered by Estimated Frequency) of noun mark
15 senses of mark
Sense 1
mark, grade, score
=> evaluation, valuation, rating
.
.
.
Sense 8
Mark, Saint Mark, St. Mark
INSTANCE OF=> Apostle, Apostelic Father
INSTANCE OF=> Evangelist
INSTANCE OF=> saint
但是,说真的,请不要只依靠Wordnet来做到这一点。可能存在大量专有名词,Wordnet不会为您获取任何信息。例如,试试亨里克这个名字吧!
但是,您可以从Google n-gram语料库等数据集中为单词w构建上下文,并使用此类上下文构建返回置信度分数的分类器(即,分类器可以说w是一个专有名词,0 < = c <= 1置信度。
推荐
-
如何使用Java中的RESTful Web服务获取远程/客户端IP地址? 我已经在我的项目中编写了Rest Web服务。Web服务调用可能来自不同 machine.so 我需要通过REST Web服务找出IP地址。 从这个请求.getRemoteAddr()使用这个。 但是我不能使用getRemoteAddr()。因为我的请
-
从包含大量文件的zip文件中提取1文件的最快方法是什么? 我尝试了但它们也缺少一些东西。 LZMA SDK不提供一种如何使用的文档/教程,这非常令人沮丧。没有 javadoc。 虽然7z jbinding没有提供一种简单的方法来只提取1个文件,但是,它只提供了提取zip文件
-
输入/输出流在销毁时是否关闭? Java 中的 InputStreams 和 OutputStreams 是否在销毁时关闭()?我完全理解这可能是不好的形式(特别是在C和C++世界中),但我很好奇。 另外,假设我有以下代码: 无名的FileInputStream是否在p.load
-
Java 程序中的字符串大小是否有任何限制? 我有一个字符串定义为 字符串 xx 我可以分配的字符数是否有任何限制? 2) 我正在将用户输入分配给此字符串 xx。70%的人只说一个字。有时他们给出一个大句子,所以想知道可
-
标签
推荐