【问题标题】:Replacing sentences with equivalent words用等价词替换句子
【发布时间】:2014-12-21 06:14:56
【问题描述】:

我想用等价词换句; 例如:

参考数据库:

put <-> set
returns <-> switch
between <-> among
paragraphs <-> null
between paragraphs <-> among paragraphs

句子:

在段落之间放置回车

替换句子:

设置段落间切换

是的;查找和更换简单而精细。 但问题是:我在记录中有“段落”和“段落之间”。如何在短裤前搜索和替换长文本?性能非常重要,因为可能参考数据库有超过 100 万行。

当前使用:实体框架、C#、MVC、SQL Server 2014

任何帮助都会很棒。谢谢。

更新:

句子:

string str = "The number of cases in the Ebola outbreak passes 10,000, with 4,922 deaths, the World Health Organization's latest report says."

并且数据库有 1,000,000 条记录; 我可以从数据库中获取所有行,然后将所有行都转换为文本。这是愚蠢的方法。 我需要一种方法来将句子写入数据库如何选择带有句子的行?

我有一个方法,比如用 ( ) 空格分割所有文本,然后尝试在数据库中选择。但它会传递带有空格的长文本。 “案件数量”;它会像“the”、“number”、“of”、“cases”一样搜索它,并使用单独的搜索......并且记录不会有用。

【问题讨论】:

标签: c# sql regex algorithm replace


【解决方案1】:

您可以在trie-like structure 中组织您的替换数据库。所有单字表达都在第一级。多词表达式存储为表达式中前面的词的后代。在您的示例中:

root
    -> put: set
    -> returns: switch
    -> between: among
        -> paragraphs: among paragraphs
    -> paragraphs: sections

根将是一个单词字典。每个节点都有一个子字典(在大多数情况下为空)和一个替换值。中间词中的替换可能为空,例如在ìn -&gt; this -&gt; case 中,this 不会有替换,因为in -&gt; this 本身不是有效的替换。

拆分你的句子并迭代单词。如果你找到了一个可能的替换开始,请按照 trie 并确定该位置的最长可能替换。替换它并从下一个单词继续迭代。

 between you and me -> among you and me
 between other paragraphs -> among other sections
 between paragraphs -> among paragraphs

分词时,保持词间的空格和标点符号,只有词间没有标点符号时才遵循trie节点,这样一个句子就像

 There must be something in between; paragraphs 1 and 2 seem to indicate that.

被正确对待。

如果您有许多句子需要用同一数据库中的替换词替换,则此方法应该很有效。数据库 trie 只能构建一次。如果您只有几句话要替换,或者您的数据库经常更改,这不是一个好方法。

【讨论】:

    【解决方案2】:

    你可以在sql server中使用REPLACE函数

    SELECT REPLACE('abcdefghicde','cde','xxx') GO
    

    这会将cde 替换为xxx

    在您的应用程序中可能是 sql

    UPDATE tablename set col=REPLACE(col,' put ',' set ') //Please notice there are 2 ' ' beside the word
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      相关资源
      最近更新 更多