gpt4 book ai didi

c# - 如何在c#中获取字符串的所有单词?

转载 作者:可可西里 更新时间:2023-11-01 02:59:00 24 4
gpt4 key购买 nike

我在一个字符串中有一个段落,我想获取该段落中的所有单词。

我的问题是我不想要以标点符号结尾的后缀单词,例如 (',','.',''','"',';',':','!' ,'?') 和/n/t 等

我也不想要带有 's 和 'm 的单词,例如 world's,它应该只返回 world。

在例子中他说。 “我的狗的骨头,玩具,不见了!”

列表应该是:他说我的狗骨头玩具不见了

最佳答案

扩展 Shan's answer , 我会考虑这样的事情作为起点:

MatchCollection matches = Regex.Match(input, @"\b[\w']*\b");

为什么要包含 ' 字符?因为这将防止像“we're”这样的词被分成两个词。捕获后,您可以自己手动去除后缀(否则,您将无法识别 re 不是一个词而忽略它)。

所以:

static string[] GetWords(string input)
{
MatchCollection matches = Regex.Matches(input, @"\b[\w']*\b");

var words = from m in matches.Cast<Match>()
where !string.IsNullOrEmpty(m.Value)
select TrimSuffix(m.Value);

return words.ToArray();
}

static string TrimSuffix(string word)
{
int apostropheLocation = word.IndexOf('\'');
if (apostropheLocation != -1)
{
word = word.Substring(0, apostropheLocation);
}

return word;
}

示例输入:

he said. "My dog's bone, toy, are missing!" What're you doing tonight, by the way?

示例输出:

[he, said, My, dog, bone, toy, are, missing, What, you, doing, tonight, by, the, way]

这种方法的一个限制是它不能很好地处理首字母缩略词;例如,“基督教青年会”将被视为四个字。我认为这也可以通过将 . 作为一个字符包含在一个单词中进行匹配来处理,然后如果它是一个句号则将其删除(即通过检查它是否是唯一的 单词中的句点以及最后一个字符)。

关于c# - 如何在c#中获取字符串的所有单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com