RegEx用于将带有缩写词的文本拆分为句子

时间:2019-03-07 15:52:13

标签: javascript regex text split

我有条短信。我需要一个句子清单。有很多细微之处,例如缩写中使用了点。 我找到了这个正则表达式

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

但是它不能正常工作

例如,我有这段文字:

  

19号房子很旧。人们说那里住着鬼   没有人见过他们。但是,它没有被称为“闹鬼”   屋;年复一年,它仍然是:“被允许出售还是被出售”

     

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

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

19号房子很旧。
人们说那里住着鬼,但没人见过。
但是,它没有被称为“鬼屋”。年复一年,它仍然是:“被允许出售还是被出售”

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

您可以看到它与太太分了句,但是我不想这么做

它应该像这样:

19号房子很旧。
人们说那里住着鬼,但没人见过。
但是,它没有被称为“鬼屋”。年复一年,它仍然是:“被允许出售还是被出售”

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

有人可以帮我吗?

2 个答案:

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

答案 1 :(得分:0)

这是我能用RegEx做到的最好的方法,因为RegEx的速度比完整的NLP分析要快,如果需要性能的话。

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