首页 > 解决方案 > 用于将带有缩写的文本拆分为句子的正则表达式

问题描述

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

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

但它不能正常工作

例如我有这个文本:

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

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

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

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

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

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

它应该如下所示:

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

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

有人可以帮我吗?

标签: javascriptregextextsplit

解决方案


谢谢你们的回答。NLP 是一个很棒的解决方案。 是一个正确的解决方案:

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/>";
} 
<script src="https://unpkg.com/compromise@latest/builds/compromise.min.js"></script>


推荐阅读