2

我想根据所显示的文章将一些关键字元标记放入页面中。

假设您加载页面 blabla.com/article.aspx?id=2 id 等于 2 的文章标题为“商业管理中故意错误的智慧”

所以我想包括这样的元标记:

<META name="keywords" content="wisdom, deliberate, mistakes, business, management" />

所以我需要一种方法来排除嘈杂的词(就像 SQL Server FullText 一样)。你会怎么做?

1)在webconfig中保存干扰词列表?2)将噪声词保存在数据库中?3) 将干扰词保存在文本文件中?4)硬编码代码中的噪声词(NOT =P)

那么,您将如何加载这些干扰词以最小化页面负载?最后,您将如何解析去除干扰词的字符串?

谢谢!

编辑:噪音(或停止)词将与 SQL Server 2005 FTS 使用的相同(检查 MSSQL\FTDATA 中的 noiseENU.txt)这是该文件的内容:

about
1
after
2
all
also
3
an
4
and
5
another
6
any
7
are
8
as
9
at
0
be
$
because
been
before
being
between
both
but
by
came
can
come
could
did
do
does
each
else
for
from
get
got
has
had
he
have
her
here
him
himself
his
how
if
in
into
is
it
its
just
like
make
many
me
might
more
most
much
must
my
never
no
now
of
on
only
or
other
our
out
over
re
said
same
see
should
since
so
some
still
such
take
than
that
the
their
them
then
there
these
they
this
those
through
to
too
under
up
use
very
want
was
way
we
well
were
what
when
where
which
while
who
will
with
would
you
your
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
4

5 回答 5

1

如果你想过滤“噪音”或“停止”词,我建议研究正则表达式,它们在这种类型的东西上速度很快。就实现而言,我可能会将噪音/停用词存储在表格中,然后使用这些词来构建您的正则表达式。您应该能够在服务器上缓存正则表达式,因此性能损失应该是最小的。

这是基于您上面提供的单词的示例。在http://regexpal.com/上有一个很好的在线正则表达式测试器:

    \b(?:about|1|after|2|all|also|3|an|4|and|5|another|6|any|7|are|8
|as|9|at|0|be|$|because|been|before|being|between|both|but|by|came|can|come|
could|did|do|does|each|else|for|from|get|got|has|had|he|have|her|here|him|
himself|his|how|if|in|into|is|it|its|just|like|make|many|me|might|more|most|
much|must|my|never|no|now|of|on|only|or|other|our|out|over|re|said|same|see|
should|since|so|some|still|such|take|than|that|the|their|them|then|there|these|
they|this|those|through|to|too|under|up|use|very|want|was|way|we|well|
were|what|when|where|which|while|who|will|with|would|you|your)\b
于 2009-07-06T18:22:16.490 回答
1

这类词被称为“停用词”——这将帮助您在谷歌上搜索一些实现想法。

我的感觉是这样做没有多大价值——标题已经被认为对于搜索索引非常重要。此外,“智慧”真的与文章相关吗?

我认为最好的关键字是人工选择的,比如标签,并且最多保持在一个特定的 1 到 3 之间,以真正描述内容。

但要回答你的问题——你认为他们会有多少?如果我要这样做,我会将它们保存在数据库中(如果我已经在使用数据库),如果它们影响性能,请将它们预加载到内存中(它可以由所有会话共享)。

于 2009-07-06T18:22:51.107 回答
0

你可以看看我的帖子Automatic generation of META tags for ASP.NET。在那里,我使用英语、法语、西班牙语和德语中的干扰词(或停用词)。对于每种语言,我都有 3 个数组:标准噪音词、最常见的动词和第三个及其变位词。通过这种方式,您可以删除干扰词以及动词和变位,甚至是不规则动词(在英语以外的其他语言中,变位比 -ed、-ing 和 -s 终止复杂得多)。

提供的示例 VB 项目代码为每个 asp.net 页面 (.aspx) 即时创建元标题、元关键字和元描述,无需用户干预,并且它的 cpu 命中仅在编译时(第一次请求)。一旦页面被编译,它们的标签(标题、关键字、描述)仍然没有任何 CPU 占用。这是因为元数据是在实际编译之前即时计算并推送到文件中的,这要归功于 VirtualPathProviders(文件系统在任何时候都不会被修改)。

我将它们存储在经过排序的编码数组中,以便能够使用二进制搜索算法。

我希望这可以以任何方式帮助你。问候。

于 2009-08-30T18:58:44.653 回答
0

@Rob 的回答为我指明了类似任务的正确方向。这是我最终得到的工作功能。该文件noiseENU.txt按原样从\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData.

    Public Function StripNoiseWords(ByVal s As String) As String
        Dim NoiseWords As String = ReadFile("/Standard/Core/Config/noiseENU.txt").Trim
        Dim NoiseWordsRegex As String = Regex.Replace(NoiseWords, "\s+", "|") ' about|after|all|also etc.
        NoiseWordsRegex = String.Format("\s?\b(?:{0})\b\s?", NoiseWordsRegex)
        Dim Result As String = Regex.Replace(s, NoiseWordsRegex, " ", RegexOptions.IgnoreCase) ' replace each noise word with a space
        Result = Regex.Replace(Result, "\s+", " ") ' eliminate any multiple spaces
        Return Result
    End Function
于 2010-01-22T22:06:57.217 回答
0

这是解决方案

  1. 将变量 $NOISE_WORDS 定义为 xs:string*
  2. {
  3. (: \b 是一个单词边界。这抓住了开始,
  4. 结尾和中间字符串匹配整个单词。:)
  5. ('\bthe\b', '\bof\b', '\ban\b', '\bor\b',
  6. '\bis\b', '\bon\b', '\bbut\b', '\ba\b')
  7. }
    1. 定义函数 remove-noise-words($string, $noise)
    2. {
    3. (:这是一个递归函数。:)
    4. 如果(不是(空($noise)))那么
    5. 去除噪音词(
    6. 替换($string, $noise[1], '', 'i'),
    7. (:这会在后面传递噪音词
    8. 刚刚评估的那个。:)
    9. $噪声[位置()> 1]
    10. )
    11. 否则归一化空间($字符串)
    12. }
      1. let $source-string1 := "李尔王的悲剧"
    13. let $source-string2 := "李尔王的悲剧这些"
    14. 让 $source-string3 :=
    15. 《李尔王的悲剧》
    16. let $source-string4 := "the of an of"
    17. (: 如果所有噪声词都需要处理空结果,
    18. 如上面的#4。:)
    19. 让 $final :=
    20. 删除噪音词($source-string1,$NOISE_WORDS)
    21. 返回 $final

访问[链接文本][1]

[1]: http: //filesharepoint.com了解更多详情..!

于 2010-06-21T06:30:16.437 回答