如何将一个段落标记成单词

本文关键字:段落标 一个 单词 | 更新日期: 2023-09-27 18:10:40

我有一个句子:

var input = @"I go to to http://www.google.com.I don't like cats.";

我想试着找出句子中所有的单词。我需要用单词来表示字符串

当我做String stripped = Regex.Replace(input,"''p{P}", "");时,我得到了I go to to httpwwwgooglecomI dont like cats

是否有一种聪明的方法来获得I go to to http://www.google.com I dont like cats而不是必须做很多if then条件。

我的问题是我不知道如何以可靠的方式检测url,以便能够将它们视为单个单词。

试过的lucene这里是它退出的术语:

=我词=去词= http词= www.google.com.i词=不词=像词=猫

如何将一个段落标记成单词

对于您当前的输入,您可以这样使用:

'b(?:(?<=http://'S*?)(?!www)'w+'.'w+|(?!www)['w']+(?!://))'b

查看演示

当然,这回避了"什么是可接受的词"的问题,所以这个表达式可以根据不同的要求和条件进行调整。

在c#

:

var myRegex = new Regex(@"'b(?:(?<=http://'S*?)(?!www)'w+'.'w+|(?!www)['w']+(?!://))'b", RegexOptions.Multiline);
string resultString = myRegex.Match(yourString).Value;
Console.WriteLine(resultString);

不,没有一个好的方法可以做到这一点,因为一个域名可以由不同数量的单词组成,所有这些例子都是有效的域名:

  • http://bit.ly
  • http://visit.my.cool.homepage
  • http://hello.you

你可以保留一个顶级域名的列表,但在今年(或去年),任何有足够钱的人都可以购买顶级域名。

但是,在您的确切情况下,您可以解析字符串,因为没有只有一个字符的顶级域。

可能的解决方案:

如果您需要可靠的解决方案,您可以做的是尝试查找每个域名。如果您无法找到该域的IP,则可能字符串太长(=将最后一个单词移到另一个单词中,然后再试一次)。

你可以先用空格分隔,然后用标点符号修饰。

char[] separators = new char[] {' ', ''t', ''r', ''n'};
char[] trimchars = new char[] {'.', ','}; 
var input = @"my string with a http://google.com/query url. I only
    want to have words";
var words = input.Split(separators, StringSplitOptions.RemoveEmptyEntries).Select(x=> x.Trim(trimchars));
foreach (var x in words)
    Console.WriteLine(x);