首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将文本拆分成单词?

如何将文本拆分成单词?
EN

Stack Overflow用户
提问于 2013-05-24 08:03:47
回答 7查看 49.6K关注 0票数 27

如何将文本拆分成单词?

示例文本:

:“哦,你没办法,”猫说,“我们都疯了。我疯了,你也疯了。”

这一行中的单词是:

  1. Oh
  2. you
  3. can't
  4. help
  5. that
  6. said
  7. the
  8. Cat
  9. we're
  10. all
  11. mad
  12. here
  13. I'm
  14. mad
  15. You're
  16. mad
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-05-24 20:11:42

用空格拆分文本,然后裁剪标点符号。

代码语言:javascript
复制
var text = "'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'";
var punctuation = text.Where(Char.IsPunctuation).Distinct().ToArray();
var words = text.Split().Select(x => x.Trim(punctuation));

与示例完全一致。

票数 52
EN

Stack Overflow用户

发布于 2013-05-24 08:06:11

首先,删除所有特殊字符:

代码语言:javascript
复制
var fixedInput = Regex.Replace(input, "[^a-zA-Z0-9% ._]", string.Empty);
// This regex doesn't support apostrophe so the extension method is better

然后拆分它:

代码语言:javascript
复制
var split = fixedInput.Split(' ');

对于删除特殊字符(您可以轻松更改)的更简单的C#解决方案,添加此扩展方法(我添加了对撇号的支持):

代码语言:javascript
复制
public static string RemoveSpecialCharacters(this string str) {
   var sb = new StringBuilder();
   foreach (char c in str) {
      if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '\'' || c == ' ') {
         sb.Append(c);
      }
   }
   return sb.ToString();
}

然后像这样使用它:

代码语言:javascript
复制
var words = input.RemoveSpecialCharacters().Split(' ');

你会惊讶地发现这个扩展方法非常有效(肯定比正则表达式更有效),所以我建议你使用它;)

更新

我同意这是一种纯英语的方法,但要使其与Unicode兼容,您所要做的就是替换:

代码语言:javascript
复制
(c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')

通过以下方式:

代码语言:javascript
复制
char.IsLetter(c)

支持Unicode,.Net还为您提供了适用于各种情况的char.IsSymbolchar.IsLetterOrDigit

票数 26
EN

Stack Overflow用户

发布于 2013-05-24 08:13:01

只需在@Adam Fridental的答案上添加一个变体,这是非常好的,你可以尝试这个Regex:

代码语言:javascript
复制
var text = "'Oh, you can't help that,' said the Cat: 'we're all mad here. I'm mad. You're mad.'";

var matches = Regex.Matches(text, @"\w+[^\s]*\w+|\w");

foreach (Match match in matches) {
    var word = match.Value;
}

我相信这是能得到所有单词的最短的RegEx

代码语言:javascript
复制
\w+[^\s]*\w+|\w
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16725848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档