JavaScript还是Python:每句话后换行

1 投票
3 回答
708 浏览
提问于 2025-04-17 05:00

我想知道有没有适用于Python或JavaScript的库,可以把一串句子拆分成单独的句子,并在每个句子后面加上换行符?

比如:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum aliquet leo in urna hendrerit placerat. Donec adipiscing dignissim adipiscing. Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. Suspendisse a consequat turpis. Morbi eget ante leo, a dignissim mi.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n
Vestibulum aliquet leo in urna hendrerit placerat.\n
Donec adipiscing dignissim adipiscing. \n
Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. \n
Suspendisse a consequat turpis. \n
Morbi eget ante leo, a dignissim mi.

3 个回答

0

如果你只是想要一段可以实现这个功能的JavaScript代码,你可以这样写:

var str = "Lorem ipsum 4.00 dolor sit amet, consectetur adipiscing elit. Vestibulum aliquet leo in urna hendrerit placerat. Donec adipiscing dignissim adipiscing. Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc etc.... sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. Suspendisse a consequat turpis. Morbi eget ante leo, a dignissim mi."

str = str.replace(/(\S\.)\s*([A-Z])/g, "$1\n$2");

你可以在这里看到它的效果:http://jsfiddle.net/jfriend00/NR5Nc/

这个算法的工作原理是:只有在遇到一个非空格字符后面跟着一个句号,然后是空格,再接着是一个大写字母时,才会添加换行。所以,它可以避免像$4.00etc...这样的情况,因为这些并不是真正的行结束符。它对于行之间的空格数量也很灵活。

0

在Python中,可以使用 str.replace() 这个方法来替换字符串中的内容:

>>> s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum aliquet leo in urna hendrerit placerat. Donec adipiscing dignissim adipiscing. Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. Suspendisse a consequat turpis. Morbi eget ante leo, a dignissim mi."
>>> print s.replace('. ', '.\n')
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Vestibulum aliquet leo in urna hendrerit placerat.
Donec adipiscing dignissim adipiscing.
Duis adipiscing mollis cursus.
Etiam fringilla elit nec enim sagittis a auctor nisi gravida.
Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat.
Suspendisse a consequat turpis.
Morbi eget ante leo, a dignissim mi.

另外,你可能会对 textwrap模块 感兴趣。

4

你在寻找一个自然语言处理的库。

对于Python,有一个叫做自然语言工具包(NLTK)。比如,你可以看看这个PunktSentenceTokenizer

PunktSentenceTokenizer可以把一段文本分成一个个句子,它使用了一种无监督的算法来建立一个模型,这个模型可以识别缩写词、常用词组和句子的开头词。在使用之前,它需要在大量的目标语言的纯文本上进行训练。这个分句器的算法在Kiss和Strunk(2006)中有详细描述:

Kiss, Tibor 和 Strunk, Jan (2006): 无监督的多语言句子边界检测。计算语言学 32: 485-525。

NLTK的数据包里包含了一个已经训练好的英语Punkt分句器。

撰写回答