javascript - 正则表达式:对句子中的小数、缩写和缩写词进行分词

标签 javascript regex

我目前正在实现一个 Javascript 函数,将给定的句子标记为更简单的标记,根据英语逐字拆分句子。

我写了一个regular expression在 Javascript 中:/\\[^]|\.+|\w+|[^\w\s]/g

在此基础上,我尝试编写一个函数,该函数将一个句子作为输入并通过单词对其进行标记化并返回一个 Javascript 数组。

function TokenizeSentence(Sentence)
{
  let tokenizedSentence = new Array();
  let tokenizingRegex = /\\[^]|\.+|\w+|[^\w\s]/g;
  Sentence.replace(tokenizingRegex, (word, offset) => tokenizedSentence.push({
    word: word,
    start: offset,
    end: offset + word.length
  }));
  return tokenizedSentence;

}

let string = `Apply 1/2 day U.S.A leave as I'm away`;

console.log(TokenizeSentence(string));

我有一个例句:Apply 1/2 day leave as I'm away,我无法弄清楚如何休1/2我是作为单个 token 而不是多个 token 。

我的问题是如何处理1/2(小数)和I'm(单词的缩写形式),U.S.A(缩写)作为单个标记?

最佳答案

您可以添加更具体的模式(如 \d+(?:\/\d+)+ 以匹配 1+ 个数字,后跟 1+ 个 / 序列和 1 + 数字和 \b\w(?:\.\w)+\b 匹配单个单词 char 后跟 1+ 个 . 序列和单个单词 char作为一个完整的词)在更通用的之前,并通过在其后添加可选的 (?:'\w+)? 组来“扩展”\w+:

function TokenizeSentence(Sentence)
{
  let tokenizedSentence = new Array();
  let tokenizingRegex = /\\[^]|\.+|\d+(?:\/\d+)+|\b\w(?:\.\w)+\b|\w+(?:'\w+)?|[^\w\s]/g;
  Sentence.replace(tokenizingRegex, (word, offset) => tokenizedSentence.push({
    word: word,
    start: offset,
    end: offset + word.length
  }));
  return tokenizedSentence;

}

let string = `Apply 1/2 day U.S.A leave as I'm away`;

console.log(TokenizeSentence(string));

详情

  • \\[^] - 任何转义序列(\ 和任何字符)
  • | - 或
  • \.+ - 1 个或多个点
  • | - 或者
  • \d+(?:\/\d+)+ - 1+ 个数字,然后是 1+ 个 / 序列和 1+ 个数字
  • | - 或者
  • \b\w(?:\.\w)+\b - 一个单词边界,一个单词 char,然后是 1+ 个点序列,后跟 1 个单词 char,然后是单词边界(如果您打算只匹配 ASCII 大写字母,请将 \w 替换为 [A-Z])
  • | - 或者
  • \w+(?:'\w+)? - 1+ 个单词字符后跟可选的 ' 序列和 1+ 个单词字符
  • | - 或者
  • [^\w\s] - 除了单词和空白字符之外的任何字符。

关于javascript - 正则表达式:对句子中的小数、缩写和缩写词进行分词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51634329/

相关文章:

javascript - 如何在客户端的jadecompile()中使用 "locals"选项?

php - 在哪里可以找到完整的正则表达式引用?

php - 查找第一组连续数字php正则表达式

c++ - boost 正则表达式捕获组

php - 简单的 PHP 表单不起作用

javascript - 如何修复带有滚动条的容器的高度

javascript - 使用带有点击事件的 jQuery 更改元素的文本。过一会又变回来

javascript - VueJS 自动创建嵌套对象属性以简化代码

javascript - 主机地址的正则表达式?

regex - Grep 排除 curl 主体的注释 <!-- --> 之间的匹配出现次数