Mac平台下高效过滤JMnedict.xml指定姓名类条目方案咨询
高效筛选JMnedict.xml姓名条目的Mac平台方案
一、使用BBEdit快速筛选
BBEdit对大文件的正则处理支持出色,无需全量加载即可操作:
- 打开JMnedict.xml,点击顶部菜单「搜索」→「查找」,勾选「正则表达式」和「匹配换行符」
- 用以下正则匹配目标条目块(覆盖你需要的所有类型):
说明:<entry>.*?<ke_inf>(f|m|s|g|u)</ke_inf>.*?</entry>f=女性名,m=男性名,s=姓,g=通用名,u=未分类 - 点击「全部查找」,右键搜索结果→「提取到新文档」,即可得到所有符合条件的条目
若需拆分不同类型,将正则里的(f|m|s|g|u)替换为单个类型(比如f),重复操作即可。
二、用Mac自带命令行工具(最快方案)
Mac终端自带的awk能高效处理超大文件,无需打开编辑器:
提取所有目标条目
在终端执行:
awk '/<entry>/{flag=1; buf=""} flag{buf=buf $0 "\n"} /<\/entry>/{if(buf ~ /<ke_inf>(f|m|s|g|u)<\/ke_inf>/) print buf; flag=0}' JMnedict.xml > filtered_names.xml
该命令会逐行读取文件,将包含目标ke_inf的<entry>块全部提取到filtered_names.xml中。
拆分单独类型(比如提取女性名)
awk '/<entry>/{flag=1; buf=""} flag{buf=buf $0 "\n"} /<\/entry>/{if(buf ~ /<ke_inf>f<\/ke_inf>/) print buf; flag=0}' JMnedict.xml > female_names.xml
把f换成m/s/g/u,就能分别提取对应类型的条目。
三、Python脚本解析(最精准,适合后续加工)
如果需要对姓名做进一步处理(比如提取假名、汉字),用Python的XML解析库更可靠:
- 创建
filter_jmnedict.py文件,内容如下:
import xml.etree.ElementTree as ET # 定义需要保留的类型 target_types = {'f', 'm', 's', 'g', 'u'} output_file = 'filtered_names.xml' # 迭代解析大XML文件,避免内存溢出 context = ET.iterparse('JMnedict.xml', events=('start', 'end')) context = iter(context) event, root = next(context) with open(output_file, 'w', encoding='utf-8') as f: f.write('<?xml version="1.0" encoding="UTF-8"?>\n<JMnedict>\n') for event, elem in context: if event == 'end' and elem.tag == 'entry': # 检查是否存在目标类型的ke_inf ke_infs = elem.findall('.//ke_inf') for ke_inf in ke_infs: if ke_inf.text in target_types: # 写入符合条件的条目 f.write(ET.tostring(elem, encoding='unicode')) f.write('\n') break # 清理元素释放内存 root.clear() f.write('</JMnedict>')
- 在终端执行:
python3 filter_jmnedict.py,完成后即可得到精准筛选的文件。
内容的提问来源于stack exchange,提问作者Kim Yoonmi--Surname first
相关产品推荐
相关产品推荐

