接受python中所有泰文字符和英文字母的正则表达式

新手上路,请多包涵

我需要用泰语对文本文档进行矢量化处理(例如 Bag of Words、doc2vec)。

首先,我想检查每个文档,省略除泰语字符和英文单词以外的所有内容(例如,没有标点符号、没有数字、除了撇号之外没有其他特殊字符)。

对于英文文档,我使用这个正则表达式: [^a-zA-Z' ]|^'|'$|''

对于泰文文档,我找不到合适的正则表达式来使用。我知道泰语的 Unicode 块是 u0E00–u0E7F。我尝试了 [^ก-๛a-zA-Z' ]|^'|'$|'' 和许多其他组合,但它们没有成功。

例如:我要

“ทรูวิชั่นส์ถ่ายทอดศึกฟุตบอลพรีเมียร์ลีกลีกอังกฤษครบทุกเป็นเป็นเป็นเวลาเวลาเวลาเวลาเวลาเวลาเวลาเวลาเวลาเวลาปีตั้งตั้งตั้งตั้งตั้งตั้งตั้งแต่แต่แต่ฤดูกาลฤดูกาลฤดูกาล2016/2017-2018/2018/2019พร้อมพร้อมพร้อมพร้อมพร้อมอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีกอีก งฝรั่งเศสภายใต้คุ้มทั้งผ่านผ่านมือถือและโทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์โทรทัศน์

成为:

“”ทรูวิชั่นส์สดฟุตบอลพรีเมียร์อังกฤษครบนัดเวลาปีตั้งแต่แต่ฤดูกาลพร้อมพร้อมด้วยด้วยอีกอีกอีกลีกลีกลาลาลีกาลีกาลีกาลีกาลีกาลีกาลีกาลีกาลีกาลีกาลาลาลาลา ทั้งผ่านมือถือและโทรทัศน์这里有一些英文单词abc”

原文由 Shani Shalgi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 796
2 个回答

我将使用一些列表来做我需要的。

首先,让我们创建模式:

 pattern = re.compile(r"[^\u0E00-\u0E7Fa-zA-Z' ]|^'|'$|''")

我将使用一个名为 test_string 的字符串,其中包含您的示例:

 test_string="ทรูวิชั่นส์ ประกาศถ่ายทอดสดศึกฟุตบอล พรีเมียร์ ลีก อังกฤษ ครบทุกนัดเป็นเวลา 3 ปี ตั้งแต่ฤดูกาล 2016/2017 - 2018/2019 พร้อมด้วยอีก 5 ลีกดัง อาทิ ลา ลีกา สเปน, กัลโช เซเรีย เอ อิตาลี และลีกเอิง ฝรั่งเศส ภายใต้แพ็กเกจสุดคุ้ม ทั้งผ่านมือถือ และโทรทัศน์ some, English words here! abc123"

首先,让我们在列表中删除要删除的字符:

 char_to_remove = re.findall(pattern, test_string)

然后,让我们创建一个由原始字符串中的字符组成的列表,不包含这些字符:

 list_with_char_removed = [char for char in test_string if not char in char_to_remove]

我们将此列表转换为字符串,然后就完成了。

 result_string = ''.join(list_with_char_removed)

结果是:

'ทรูวิชั่นส์ ประกาศถ่ายทอดสดศึกฟุตบอล พรีเมียร์ ลีก อังกฤษ ครบทุกนัดเป็นเวลา ปี ตั้งแต่ฤดูกาล พร้อมด้วยอีก ลีกดัง อาทิ ลา ลีกา สเปน กัลโช เซเรีย เอ อิตาลี และลีกเอิง ฝรั่งเศส ภายใต้แพ็กเกจสุดคุ้ม ทั้งผ่านมือถือ และโทรทัศน์ some English words here abc'

如果您有任何更简洁的方法来执行任何步骤/任何问题,请不要犹豫!

原文由 HolyDanna 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 Python 3 中,

 s = "ทรูวิชั่นส์ ประกาศถ่ายทอดสดศึกฟุตบอล พรีเมียร์ ลีก อังกฤษ ครบทุกนัดเป็นเวลา 3 ปี ตั้งแต่ฤดูกาล 2016/2017 - 2018/2019 พร้อมด้วยอีก 5 ลีกดัง อาทิ ลา ลีกา สเปน, กัลโช เซเรีย เอ อิตาลี และลีกเอิง ฝรั่งเศส ภายใต้แพ็กเกจสุดคุ้ม ทั้งผ่านมือถือ และโทรทัศน์ some, English words here! abc123"
pattern = re.compile(r"(?:[^\d\W]+)|\s")
for each in pattern.findall(s): print(each, end="")

输出这个:

 ทรวชนส ประกาศถายทอดสดศกฟตบอล พรเมยร ลก องกฤษ ครบทกนดเปนเวลา  ป ตงแตฤดกาล    พรอมดวยอก  ลกดง อาท ลา ลกา สเปน กลโช เซเรย เอ อตาล และลกเอง ฝรงเศส ภายใตแพกเกจสดคม ทงผานมอถอ และโทรทศน some English words here

正在删除口音,因此这不是一个完美的答案。我目前正在环顾四周,看看为什么会这样。

编辑:使用 HolyDanna 答案中的字符范围,您可以保留重音。有趣的是,仅使用 word 不会保留重音(这可能是由于 unicode 代码点如何在重音字符后添加重音作为另一个代码点,但似乎是一个错误)。它还具有从其他语言中删除字符的副作用。只需替换 HolyDanna 的编译行:

pattern = re.compile(r"[\u0E00-\u0E7Fa-zA-Z' ]")

如果不需要,可以去掉撇号(等)。

原文由 Keozon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题