【问题标题】:sql query relative searching to previous searched wordssql查询相对于先前搜索的单词的搜索
【发布时间】:2011-01-16 22:45:58
【问题描述】:

我有表格中的单词列表。我想搜索所有包含例如的记录book and books,pen and pen,这意味着所有以“s”结尾的单词。查询应该显示没有“s”的单词和带有“s”的单词。 不是查询"SELECT * FROM words WHERE word LIKE '%s'" 架构定义是,

单词 = <word, part_of_speech>

我必须搜索“单词” 我怎样才能做到这一点? 结果可能是,

book
books
pen
pens

类似于,如果列中有一个值作为“word”,并且有另一个值作为“word”+'s',则显示“word”和“word”+'s' 的行。 我正在使用 sqlite。

【问题讨论】:

  • 这将有助于说明这是用于哪个 DBMS?
  • factoryfactories; manmen
  • 鱼 -> 鱼,老鼠 -> 老鼠。你解释了这种向复数的转变吗?不太确定你的问题是什么,你的意思是一个表中有一个单词列表,你想用它来搜索另一个表,使用第一个表中的单数和复数形式的列表?对于正在搜索的表,匹配项是否只需要“整个单词”?
  • 这主要用于sqlite DB。在同一张桌子上。我想搜索所有带有任何单词和特定后缀的单词。我在问题中进行了更多解释。

标签: sql sqlite


【解决方案1】:
SELECT word FROM words WHERE word LIKE 'book%'

将匹配'book'、'books'、'bookmark'等

【讨论】:

  • 它不仅在书本上,而且还有其他单词和特定后缀。
  • 你能发布你的 CREATE TABLE 脚本吗?
  • CREATE TABLE "no_en" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "no" VARCHAR NOT NULL COLLATE NOCASE, "en" VARCHAR NOT NULL COLLATE NOCASE , "part_of_speech" VARCHAR, 类别 INTEGER, FOREIGN KEY (category) REFERENCES categories(id) )
【解决方案2】:

如果您只想搜索特定的后缀,请尝试

SELECT
    *
FROM
    words
WHERE
    word = '%s'
    or word = '%s' || 's' #change 's' to any addition you want to try

【讨论】:

    【解决方案3】:

    谷歌搜索“Porter Stemming Algorithm”并将其应用于您的数据加载之前。该算法不仅可以将复数形式,而且可以将许多其他形式的单词转换为单个单词。例如,“scholarly”变成“scholar”之类的东西。

    如果这不符合您的质量标准,因为它不会捕获“老鼠”和其他答案中给出的其他示例,您将不得不找到一个“词干文件”。我知道没有免费的(这并不意味着没有),但我们在我的商店使用的那个是商业包的一部分,所以我从来没有找到免费的。

    无论如何,一旦您将词干应用于输入的单词,您就不必再搜索单词的多个版本,只需搜索词干即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多