将句子分割成单词,但在c#中有标点问题

本文关键字:问题 但在 分割 句子 单词 | 更新日期: 2023-09-27 18:07:54

我已经看到了一些类似的问题,但我正在努力实现这一点。

给定一个字符串,str="月球是我们的天然卫星,即它围绕地球旋转!"我想提取单词并将它们存储在一个数组中。期望的数组元素是这样的:

the 
moon 
is 
our 
natural 
satellite 
i.e. 
it  
rotates 
around 
the 
earth

我尝试使用字符串。分割(',''t',''r'),但这不能正常工作。我也试着删除。,和其他标点符号,但我想要一个字符串,如"即"被解析出来了。实现这一目标的最佳方式是什么?我也尝试使用正则表达式。分裂也无济于事。

string[] words = Regex.Split(line, @"'W+");

肯定会感谢在正确方向上的一些推动。

将句子分割成单词,但在c#中有标点问题

一个正则表达式解决方案。

('b[^'s]+'b)

如果你真的想把最后一个.固定在i.e.上你可以用这个

(('b[^'s]+'b)((?<='.'w).)?)

这是我正在使用的代码。

  var input = "The moon is our natural satellite, i.e. it rotates around the Earth!";
  var matches = Regex.Matches(input, @"(('b[^'s]+'b)((?<='.'w).)?)");
  foreach(var match in matches)
  {
     Console.WriteLine(match);
  }

结果:

The
moon
is
our
natural
satellite
i.e.
it
rotates
around
the
Earth

我怀疑您正在寻找的解决方案比您想象的要复杂得多。你正在寻找某种形式的实际语言分析,或者至少是一本字典,这样你就可以确定句点是单词的一部分还是句子的结尾。你有没有考虑过它可能两者兼而有之?

考虑添加一个允许的"包含标点符号的单词"字典。这可能是解决问题最简单的方法。

这对我有用。

var str="The moon is our natural satellite, i.e. it rotates around the Earth!";
var a = str.Split(new char[] {' ', ''t'});
for (int i=0; i < a.Length; i++)
{
    Console.WriteLine(" -{0}", a[i]);
}

结果:

 -The
 -moon
 -is
 -our
 -natural
 -satellite,
 -i.e.
 -it
 -rotates
 -around
 -the
 -Earth!

您可以对结果进行一些后处理,删除逗号和分号等

Regex.Matches(input, @"'b'w+'b").OfType<Match>().Select(m => m.Value)
相关文章: