有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我提到数据库和操作系统是因为,我知道Postgres有一些用于执行its text-search indexing的字典,我认为大多数Linux系统都会有一些基线字典,至少对于拼写检查这样的简单事情。然而,利用这些资源是否容易或切实可行则是另一回事

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

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

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

我知道有很多选择——谷歌搜索“java dictionary”会发现一个负载,但根本不清楚这些项目中哪些仍然处于活动状态,哪些更有用(主观,我知道:p),或者哪些对于我的目的来说可能是过度的

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


共 (1) 个答案

  1. # 1 楼答案

    如评论中所述,您可以在Linux系统上使用字典。我的american-english安装在/usr/share/dict/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 is a client for the Dictionary Server Protocol (DICT), a TCP transaction based query/response protocol that provides access to dictionary definitions from a set of natural language dictionary databases.

    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输出以下goose的复数形式,您还需要解析才能找到

    pl. {Geese}