在Linux下使用PostgreSQL在基于Java / Scala的应用程序中访问(英语)“词典”的最简单方法?

我有一个基于Scala的应用程序(它可以访问标准的Java程序),利用运行在Linux上的PostgreSQL数据库。

我提到数据库和操作系统是因为我知道Postgres有一些用于文本search索引的字典,我想大多数Linux系统都会有一些基本的字典,至less对于拼写检查这样的简单的东西来说。 然而,利用这些是否容易或实际是另一回事。

我不需要完整的单词定义,但我需要能够回答以下问题:

  • 词属于哪一部分? (例如,单词X是一个名词吗?它是一个动词吗?)
  • 是一个单词复数? 如果是这样,它的单数forms是什么? (反之亦然)

该解决scheme不需要超快速,但是如果它至less可用于提供高速caching解决scheme组合使用的Web请求,那就太棒了。

我知道在那里有很多的选项 – search“java辞典”将会发现一个负载,但是这些项目中哪些仍然是活动的,哪些更有用(主观的,我知道:P),还不清楚这可能是为了我的目的矫枉过正。

另外,一个解决scheme或者(a)与我已经有的堆栈,或者(b)作为一个简单的sbt依赖将是理想的!

如注释中所述,您可以使用Linux系统上的字典。 我在/usr/share/dict/american-english安装了/usr/share/dict/american-english 。 这本词典几乎包括100,000个单词,对于简单的拼写检查可能没问题。 如果您需要其他语言或语言版本,则可以通过软件包管理器进行安装。

使用Scala和这个字典做一个简单的拼写检查可以通过测试给定单词的存在在单词集中来完成。

 scala> scala.io.Source.fromFile("/usr/share/dict/american-english").getLines.toSet //Removed some apostrophes for the mark down. res0: scala.collection.immutable.Set[String] = Set(professed, groundbreakings, slenderized, Nickelodeons, pathogens, OCasey, metacarpals, pokeys, chary, purifies, Borgs, ... scala> res0.contains("foo") res1: Boolean = false scala> res0.contains("computer") res2: Boolean = true 

dict是另一个可用于查找词性和多个词的Linux实用程序。 我将借用它的手册页中的说明:

dict是Dictionary server Protocol(DICT)的客户端,它是一个基于TCP事务的查询/响应协议,可以从一组自然语言字典数据库访问字典定义。

dict命令可以在本地运行,也可以在服务器上运行。 最难的部分是你将不得不解析输出来获得你想要的信息,可以在Scala或你选择的文本解析工具中完成。 例如, dict run给出了一个名词和动词的定义,它们分别以nv开始。

 n 1: a score in baseball made by a runner touching all four bases safely; ... v 1: move fast by using one's feet, with one foot off the ground at any given time;... 

对于多个dict goose输出下面的复数形式的鹅,你也必须解析才能找到。

 pl. {Geese}