【问题标题】:RegEx for splitting text with abbreviations into sentences用于将带有缩写的文本拆分为句子的正则表达式
【发布时间】:2019-03-07 15:52:12
【问题描述】:

我有一个文本。我需要一个句子列表。有很多微妙之处,例如在缩写中使用点。 我找到了这个正则表达式

(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s

但它不能正常工作

例如我有这样的文字:

19 号房子很旧。人们说有鬼,但 没有人见过他们。然而,它并没有被称为“闹鬼” 屋;年复一年,它仍然存在:“待售”

房屋经纪人拉迪什先生很高兴看到兰开斯特夫人在 对这个房子感兴趣。但她的问题是:“它空了多久?” 让他有点担心:“呃——呃——过一段时间,”他回答道。

这就是使用这个正则表达式进行拆分的方式

19 号房子很旧。
人们说有鬼,但没有人见过。
然而,它并没有被称为“鬼屋”。年复一年,它仍然存在:“要出租还是要出售”

房屋经纪人 Raddish 先生很高兴看到 Mr.
兰开斯特对这所房子很感兴趣。
但她的问题是:“它空了多久?”让他有点担心:“呃——呃——过一段时间,”他回答。

正如你所看到的那样,它与夫人分开了,但我不想要这个

应该是这样的:

19 号房子很旧。
人们说有鬼,但没有人见过。
然而,它并没有被称为“鬼屋”。年复一年,它仍然存在:“要出租还是要出售”

房屋经纪人拉迪什先生很高兴看到兰开斯特夫人对这所房子感兴趣。
但她的问题是:“它空了多久?”让他有点担心:“呃——呃——过一段时间,”他回答。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 所以你要建立一个以点结尾但不是句子结尾的所有事物的列表?也很奇怪先生会有一个点....
  • 我想得到一个页面上所有句子的列表,以增加点击翻译整个句子的能力。但是如果句子包含缩写,我会遇到问题
  • 没有 reg exp 可以确定它是否是 abv。因此,您需要列出所有可能的缩写。
  • 如果句子的最后一个单词是缩写怎么办?这是一个出乎意料的棘手问题。
  • NLP(自然语言处理)比正则表达式更适合解决这类任务

标签: javascript regex text split


【解决方案1】:

谢谢大家的回答。 NLP 是一个很棒的解决方案。 HERE 是正确的解决方案:

const txt = `The house No. 19 was very old. People said that there lived ghosts but nobody had ever seen them. However, it wasn’t called a «haunted» house; year after year it remained: "To Be Let or Sold"

The house agent Mr. Raddish was glad to see that Mrs. Lancaster was interested in this house. But her question: «How long was it empty?» made him a little worried: «Er — er — some time,» he answered.`;
let sentences = nlp(txt).sentences().data()
for (var s of sentences) {
  document.body.innerHTML += s.text + "<br/>";
} 
&lt;script src="https://unpkg.com/compromise@latest/builds/compromise.min.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案2】:

    这是我能用 RegEx 做的最好的帮助,因为如果您需要性能,RegEx 将比完整的 NLP 分析更快。

    .+?(?:(?<![\s.]\p{Lu}|r|rof|s|rs|iss|o)[.!?]|$)
    

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 2013-07-13
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多