我有条短信。我需要一个句子清单。有很多细微之处,例如缩写中使用了点。 我找到了这个正则表达式
(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s
但是它不能正常工作
例如,我有这段文字:
19号房子很旧。人们说那里住着鬼 没有人见过他们。但是,它没有被称为“闹鬼” 屋;年复一年,它仍然是:“被允许出售还是被出售”
房屋经纪Raddish先生很高兴看到兰开斯特夫人 对这所房子感兴趣。但是她的问题是:“空了多长时间?” 让他有些担心:“呃-嗯-一段时间,”他回答。
这就是使用此正则表达式进行拆分的方式
19号房子很旧。
人们说那里住着鬼,但没人见过。
但是,它没有被称为“鬼屋”。年复一年,它仍然是:“被允许出售还是被出售”
房屋经纪Raddish先生很高兴见到夫人。
兰开斯特(Lancaster)对这所房子感兴趣。
但是她的问题是:“空了多久?”让他有点担心:“呃,嗯,有一段时间,”他回答。
您可以看到它与太太分了句,但是我不想这么做
它应该像这样:
19号房子很旧。
人们说那里住着鬼,但没人见过。
但是,它没有被称为“鬼屋”。年复一年,它仍然是:“被允许出售还是被出售”
房屋经纪Raddish先生很高兴看到兰开斯特夫人对这所房子感兴趣。
但是她的问题是:“空了多久?”让他有点担心:“呃,嗯,有一段时间,”他回答。
有人可以帮我吗?
答案 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)[.!?]|$)