从字符串中提取一定范围内的unicode字符
Extract unicode characters within a certain range from a string
我有一个包含大量垃圾字符的文本文件。
https://raw.githubusercontent.com/shantanuo/marathi_spell_check/master/dicts/sample.txt
我只需要保留 Devnagari 字符。预期的干净输出看起来像这样...
भूमी
भूमी
भूमीला
भैय्यासाहेब
भैरवनाथ
भैरवी
भैरव
गावापासून
गा
根据此页面,我需要提取 U+090 到 U+097 之间的所有字符
https://en.wikipedia.org/wiki/Devanagari_(Unicode_block)
我试过这段代码,但是 returns 一些外来字符。
def remove_junk(word):
mylist=list()
for i in word:
if b'9' in (i.encode('ascii', 'backslashreplace')):
mylist.append(i)
return (''.join(mylist))
with open('sample2a.txt', 'w') as nf:
with open('sample.txt') as f:
for i in f:
nf.write(remove_junk(i) + '\n')
您可以使用正则表达式删除所有不在 unicode 范围 U+0900-U+097F 内的字符。
import re
p = re.compile(r'[^\u0900-\u097F\n]') # preserve the trailing newline
with open('sample.txt') as f, open('sample2a.txt', 'w') as nf:
for line in f:
cleaned = p.sub('', line)
if cleaned.strip():
nf.write(cleaned)
最小代码示例
import re
text = '''
‘भूमी
‘भूमी’
‘भूमी’ला
‘भैय्यासाहेब
‘भैरवनाथ
‘भैरवी
‘भैरव’
ﻇﻬﻴﺮ
(ページを閲覧しているビジターの使用言語)。
(缺少文字)
गावापासून
गा
'''
p = re.compile(r'[^\u0900-\u097F\n]')
for line in text.splitlines():
cleaned = p.sub('', line)
if cleaned.strip():
print(cleaned)
# भूमी
# भूमी
# भूमीला
# भैय्यासाहेब
# भैरवनाथ
# भैरवी
# भैरव
# गावापासून
# गा
我不知道 Python,但我想可以像在 JavaScript 中一样在正则表达式中使用 Unicode 属性,因此可能以某种方式调整以下脚本, 使用 梵文脚本 属性:
var text =
`‘भूमी
‘भूमी’
‘भूमी’ला
‘भैय्यासाहेब
‘भैरवनाथ
‘भैरवी
‘भैरव’
ﻇﻬﻴﺮ
(ページを閲覧しているビジターの使用言語)。
(缺少文字)
गावापासून
�गा`;
console.log (text.replace (/[^\r\n\p{Script=Devanagari}]/gu, ""));
产生:
भूमी
भूमी
भूमीला
भैय्यासाहेब
भैरवनाथ
भैरवी
भैरव
गावापासून
गा
我有一个包含大量垃圾字符的文本文件。
https://raw.githubusercontent.com/shantanuo/marathi_spell_check/master/dicts/sample.txt
我只需要保留 Devnagari 字符。预期的干净输出看起来像这样...
भूमी
भूमी
भूमीला
भैय्यासाहेब
भैरवनाथ
भैरवी
भैरव
गावापासून
गा
根据此页面,我需要提取 U+090 到 U+097 之间的所有字符 https://en.wikipedia.org/wiki/Devanagari_(Unicode_block)
我试过这段代码,但是 returns 一些外来字符。
def remove_junk(word):
mylist=list()
for i in word:
if b'9' in (i.encode('ascii', 'backslashreplace')):
mylist.append(i)
return (''.join(mylist))
with open('sample2a.txt', 'w') as nf:
with open('sample.txt') as f:
for i in f:
nf.write(remove_junk(i) + '\n')
您可以使用正则表达式删除所有不在 unicode 范围 U+0900-U+097F 内的字符。
import re
p = re.compile(r'[^\u0900-\u097F\n]') # preserve the trailing newline
with open('sample.txt') as f, open('sample2a.txt', 'w') as nf:
for line in f:
cleaned = p.sub('', line)
if cleaned.strip():
nf.write(cleaned)
最小代码示例
import re
text = '''
‘भूमी
‘भूमी’
‘भूमी’ला
‘भैय्यासाहेब
‘भैरवनाथ
‘भैरवी
‘भैरव’
ﻇﻬﻴﺮ
(ページを閲覧しているビジターの使用言語)。
(缺少文字)
गावापासून
गा
'''
p = re.compile(r'[^\u0900-\u097F\n]')
for line in text.splitlines():
cleaned = p.sub('', line)
if cleaned.strip():
print(cleaned)
# भूमी
# भूमी
# भूमीला
# भैय्यासाहेब
# भैरवनाथ
# भैरवी
# भैरव
# गावापासून
# गा
我不知道 Python,但我想可以像在 JavaScript 中一样在正则表达式中使用 Unicode 属性,因此可能以某种方式调整以下脚本, 使用 梵文脚本 属性:
var text =
`‘भूमी
‘भूमी’
‘भूमी’ला
‘भैय्यासाहेब
‘भैरवनाथ
‘भैरवी
‘भैरव’
ﻇﻬﻴﺮ
(ページを閲覧しているビジターの使用言語)。
(缺少文字)
गावापासून
�गा`;
console.log (text.replace (/[^\r\n\p{Script=Devanagari}]/gu, ""));
产生:
भूमी
भूमी
भूमीला
भैय्यासाहेब
भैरवनाथ
भैरवी
भैरव
गावापासून
गा