在Linux中使用PostgreSQL在基于Java / Scala的应用程序中访问(英语)"字典"的最快,最简单的方法?



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

我提到数据库和操作系统是因为,我知道Postgres有某种字典来进行文本搜索索引,我认为大多数Linux系统都会有某种基线字典,至少对于拼写检查这样的简单事情来说是这样。然而,利用这些技术是容易还是实用,则另当别论。

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

  • 一个单词属于哪个词类?(例如,单词X是名词吗?它是动词吗?)
  • 一个词是复数吗?如果是,它的单数形式是什么?(反之亦然。)

该解决方案不需要非常快,但如果它至少可以用于服务web请求(其中结合使用了缓存解决方案),那就太好了。

我知道有很多选择——在谷歌上搜索"java字典"会发现一个负载,但根本不清楚这些项目中哪些仍然处于活动状态,哪些更可用(我知道是主观的:p),也不清楚哪些对我来说可能太过了。

此外,(a)使用我已经准备好的堆栈,或者(b)作为简单的sbt依赖项的解决方案将是理想的!

如注释所示,您可以在Linux系统上使用字典。Mine在/usr/share/dict/american-english中安装了american-english。这本字典包含了近10万个单词,可能可以进行简单的拼写检查。如果您需要另一种语言或语言变体,可以通过软件包管理器进行安装。

使用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是字典服务器协议(dict)的客户端,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} 

最新更新