gpt4 book ai didi

algorithm - 将直引号转换为弯引号的想法

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:38 25 4
gpt4 key购买 nike

我有一个包含“直”(正常,ASCII)引号的文件,我正在尝试将它们转换为真实的 quotation mark glyphs (“ curl ”引号,U+2018 到 U+201D)。由于从一开始就将两个不同的引号字符转换为一个引号字符是有损的,显然没有办法自动执行此转换;尽管如此,我怀疑一些启发式方法可以涵盖大多数情况。所以计划是一个脚本(在 Emacs 中),它执行如下操作:对于每个直引号字符,

  1. 如果可能的话,猜猜使用哪个弯引号
  2. 请用户(我)确认,或做出选择

这个问题是关于第一步的:对于普通的英文文本(例如小说),什么是好的算法(一组启发式算法,更像是)?以下是一些初步的想法,我认为它们适用于双引号(欢迎反例!):

  1. 如果双引号在一行的开头,猜测它是一个开引号。
  2. 如果双引号在行尾,请猜测结束引号。
  3. 如果双引号前面有一个空格,请猜一个开头引号。
  4. 如果双引号后跟一个空格,请猜一个结束引号。
  5. 如果双引号不属于上述类别之一,请猜测它是最近使用的双引号的“相反”类型。

单引号比较棘手,因为 ' 可能是左引号、右引号、 撇号,我们想单独留下撇号(不能写“不能”)。一些与上述相同的规则适用,但 'tis 可能在单词(或行)的开头,尽管它不像过去那样常见。我无法立即想到可以正确处理片段的规则,例如 [“我喜欢‘70 年代的表演’”,她说]。它可能需要查看的不仅仅是相邻字符,还需要计算引号之间的距离,例如……

还有什么想法吗?如果没有涵盖所有可能的情况也没关系;目标是尽可能聪明,但仅此而已。 :-)

编辑:更多一些可能值得思考的事情(或者可能无关紧要,不确定):

  • 引号可能并不总是匹配对:对于单引号,原因很明显,如上。但即使是双引号,当引文超过一个段落时,通常的排版惯例(不要问我为什么)是以引号开始每个段落,即使它在前一个段落中没有被关闭一。因此,简单地保持一个在两种状态之间交替的状态机行不通!
  • 嵌套引用(在上面的“我喜欢‘70 年代的表演’”示例中提到):这可能会使任何一种引用在前面或后面有一个空格。
  • 英式/美式标点符号风格:逗号是在引号内还是引号外?
  • 许多文字处理器(例如 Microsoft Word)已经进行了类似这样的某种转换。尽管它们并不完美并且常常令人讨厌,但了解它们的工作原理可能会有所启发...

最佳答案

一个好的起点是状态机:

  • 从位置 0 开始,遍历字符
  • 找到报价后,进入“已报价”状态(开报价)
  • 如果在“Quoted”状态下遇到引用,返回“Starting”状态(结束引用)

您可以在每个状态转换时做出额外的决定。

您可以尝试通过识别已知连词来规范化单引号,例如,并在处理之前将它们转换为不同的字符,而不是文本字符。

我的 0.02 美元

关于algorithm - 将直引号转换为弯引号的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/509685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com