用等效的单词替换句子

时间:2014-10-25 15:56:45

标签: c# sql regex algorithm replace

我想用相同的词来改变句子; 例如:

参考数据库:

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

句子:

在段落之间添加回报

替换句子:

设置段落之间的切换

是;寻找和替换容易和罚款。 但问题是:我有&#34; 段落&#34;和&#34;段落之间的 &#34;在记录中。如何在短片之前搜索和替换长文本?性能非常重要,因为参考数据库可能超过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条记录; 我可以从数据库中获取所有行,并将所有行预设为文本。这是一种愚蠢的方法。 我需要一种方法来句子到数据库如何选择带句子的行?

我有一个方法,比如将所有文本拆分为()white-space,然后尝试在数据库中选择。但它会传递带有空格的长文本。 &#34;病例数&#34 ;;它会像&#34;&#34;,&#34;&#34;,&#34;&#34;,&#34;&#34;&#34;分开搜索......记录无用。

2 个答案:

答案 0 :(得分:0)

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

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

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

拆分你的句子并迭代这些词。如果您发现可能的替换开始,请按照特里结束并确定此位置可能的最长替换。替换它并从下一个单词继续迭代。

 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必须只构建一次。如果您只需要替换几个句子,或者您的数据库频繁更改,这不是一个好方法。

答案 1 :(得分:-1)

您可以在sql server

中使用REPLACE函数
SELECT REPLACE('abcdefghicde','cde','xxx') GO

cde替换为xxx

在您的应用程序中可能是

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