问题
MacOSX附带存储在/Library/Dictionaries
中的词典。我想解析它们以编程方式获取字典结果(通过Terminal,AppleScript或Automator)。字典是MacOSX包,并且都有一个Contents
文件夹,其中包含一个名为Body.data
的文件。我想解析该文件的UTF-8字符串(可能是中文字符双字节)并返回找到字符串的行。
我已尝试过以下操作,但未返回任何结果:
find . -name 'Body.data' -exec grep -li '我' {} \;
当我使用app界面搜索字典时,我可以找到合适的文本。我的目标是创建一个工作流服务,将选定的中文文本转换为存储在系统/用户词典中的拼音等价物。
更新
根据接受的答案,以下内容对我有用:
使用Xcode使用以下代码创建并存档名为rdef
的命令行实用程序:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
if(argc < 2)
{
printf("Usage: rdef <word to define>");
return -1;
}
NSString * search =
[NSString stringWithCString: argv[1] encoding: NSUTF8StringEncoding];
CFStringRef def =
DCSCopyTextDefinition(NULL,
(__bridge CFStringRef)search,
CFRangeMake(0, [search length]));
NSString * output =
[NSString stringWithFormat: @"Definition of <%@>: %@", search, (__bridge NSString *)def];
printf("%s", [output UTF8String]);
}
return 0;
}
在我的项目框架中添加了以下内容:
执行构建,然后使用以下步骤手动部署。
部署:
右键单击Archived包并选择Show in Finder。然后显示包内容并向下钻取产品文件夹并将可执行文件复制到/local/usr/bin
。现在从命令提示符我可以像这样运行实用程序:
rdef 我|awk -F '\|' '{ gsub(/^ +| +$/, "", $2); print $2 }'
请参阅下面接受的答案以获取扩展参考资料。
NB: 可以在https://github.com/mingsai/rdef.git
找到该实用程序的github 接下来我将创建一个服务,从Automator中针对所选文本调用该实用程序。
服务解决方案
为有帮助的人付费,特别是@ mklement0:这是获取命令实用程序并将其转换为可用于将中文字符翻译为拼音的MacOSX服务的解决方案。
创建一个新的Automator服务文件,并确保选择输出替换所选文本。
Automator脚本详情
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin/:
export PATH
LC_CTYPE=UTF-8
x=$1
for ((i=0;i<${#x};i++)); do rdef "${x:i:1}" | awk -F '\|' 'BEGIN {ORS=" "}{ gsub(/^ | +?/, "", $2); if (length($2) > 0) print $2 ; exit}'; done
使服务&#34;生活&#34;只需删除&#34; Ask for Text&#34;并使用您选择的名称保存服务(例如转换为拼音)。
要使用修改后的服务突出显示任何中文字符并右键单击上下文菜单,然后在“服务”菜单下方选择&#34;转换为拼音&#34; ......(如下所示)
用法
生成此输出
希望能帮助解决这个问题的人。
答案 0 :(得分:1)
我查看了Chinese Simplified
和Oxford English Dictionary
,并且两者都有一个Contents
和Body.data
文件。但是,如果我跑
file Body.data
它只是说data
(而不是ASCII
文本,或UTF-8
) - 意味着文件是二进制而不是ASCII所以grep和它的朋友不会很好地工作在他们身上。
如果有人擅长从十六进制转储中发现文件类型,那么文件就像这样开始:
0000000 0000 0000 0000 0000 0000 0000 0000 0000
\0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000100 c9a8 0106 0000 0000 ffff ffff 0020 0000
250 311 006 001 \0 \0 \0 \0 377 377 377 377 \0 \0 \0
0000120 0000 0000 0207 0000 ffff ffff ffff ffff
\0 \0 \0 \0 \a 002 \0 \0 377 377 377 377 377 377 377 377
0000140 8009 0000 8005 0000 8c22 0004 9c78 bddc
\t 200 \0 \0 005 200 \0 \0 " 214 004 \0 x 234 ܽ **
0000160 6c6b db1b 2f7e e416 49a6 349a c5b8 902d
k l 033 333 ~ / 026 344 246 I 232 4 270 305 - 220
0000200 fda2 7134 7880 d4ef 2cb6 96d9 9dad f673
答案 1 :(得分:1)
grep
对文本文件进行操作,但遗憾的是Body.data
文件不是文本文件。
您最好的选择可能是在Xcode中创建自己的命令行实用程序,如此处所示(示例代码):https://discussions.apple.com/thread/2679911
<强>更新强>:
假设您已经创建了一个名为rdef
的实用程序,它返回'Definition of <我>: | wǒ | I me my'
之类的内容,请使用以下awk
命令来解析拼音:
rdef "我" | awk -F ' *[|] *' '{ print $2 }'
或者,如果可以选择基于在线的解决方案,您可以尝试使用基于Google翻译的解决方案。
至少在交互式使用中,您会在输入字段下方获得拼音转录。
例如,您的示例符号转录为“Wǒ”:
http://translate.google.com/?text=%E6%88%91#zh-CN/en/%E6%88%91