【问题标题】:Removing only specific diacritics from text in python从python中的文本中仅删除特定的变音符号
【发布时间】:2020-04-05 00:25:25
【问题描述】:

我需要从希伯来语文本中删除某些变音符号。如果我需要从所有变音符号中删除文本,那将不是这样的问题。

在 unicode 中,我要删除的范围在 \u0591 和 \u05AF 之间(或十进制的 1425 - 1455)。理想情况下,所有其他字符(字母、变音符号或标点符号)都应保留。

输入是一个文本文件,输出也应该是一个文本文件。 仅删除一系列 unicode 字符的最佳方法是什么? 或者也许 unicode 不是正确的方向......?

编辑:

这是我用来删除所有变音符号的代码。有什么建议我可以修改它以便它只删除所需的字符而不是所有的变音符号?

    normalized=unicodedata.normalize('NFKD', content)
    no_diacritics=''.join([c for c in normalized if not 
    unicodedata.combining(c)])
    no_diacritics
    f.close()

非常感谢您的帮助!谢谢。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 您可以使用i=[false if 1425 <= ord(c) <=1455 else true for c in text] 之类的东西来获取所需字符的位置,并使用t=text[i] 来删除不需要的字符。
  • 你能包括你已经尝试过的吗?为什么你不喜欢?也许让问题更具体?请看:stackoverflow.com/help/how-to-ask
  • 已编辑。谢谢!
  • 我会创建一个函数来返回变音符号是否在您要删除的特定范围内,然后使用与您现有解决方案非常相似的方法,只需将 unicodedata.combining 替换为您的新函数。

标签: python regex unicode hebrew python-textprocessing


【解决方案1】:

如果我理解正确,这应该可以满足您的需要:

normalized = unicodedata.normalize('NFKD', content)
no_diacritics = ''.join(c for c in normalized if not '\u0591' <= c <= '\u05af')

它会检查您要排除的范围内的每个字符。 表达式'\u0591' &lt;= c &lt;= '\u05af' 利用了字符的词法排序顺序,这与它们的代码点相同。 如果您喜欢数字比较,也可以写 0x0591 &lt;= ord(c) &lt;= 0x05af 甚至 1425 &lt;= ord(c) &lt;= 1455

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 2016-09-01
    • 2012-10-25
    • 2017-11-18
    • 2011-04-07
    • 1970-01-01
    • 2010-09-19
    • 2012-12-10
    相关资源
    最近更新 更多