터미널부터 맥 사전 사용하기
애플 스크립트로 CLI의 주요 특징 만들기
mac 사전.터미널에서 앱을 사용하고 싶다고 하시네요.
그중에 이 부분.
사실 하고 싶은 것은 사전이다.앱 시작 아니에요.
여기를 좀 짧게 잘라주세요.
간단한 처리
Objective-c용 사전api가 있어요.pyObjC를 통해 그걸 사용하면 하고 싶은 일이 해결된다는 걸 알아요.
사실 쉬워요.
dictionary.py
#!/usr/bin/python
import sys
from DictionaryServices import *
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
word = sys.argv[1].decode('utf-8')
result = DCSCopyTextDefinition(None, word, (0, len(word)))
print result
전용 DCSCopyTextDefinition
불만스럽다
이 대본은 전부터 있었는데 불만이 너무 많아서 풀고 싶었어요.
1.조금 늦다
이벤트
2초 정도 걸려요.
$ for word (透過性 免罪 りんご 意識 資源 apple apriori fox edit macintosh); do
echo -n `gdate +"%H:%M:%S.%3N"`
python dictionary.py $word > /dev/null
echo -n ' - '
echo `gdate +"%H:%M:%S.%3N"`
done
12:07:34.767 - 12:07:36.903
12:07:36.906 - 12:07:38.996
12:07:39.000 - 12:07:41.062
12:07:41.066 - 12:07:43.111
12:07:43.115 - 12:07:45.219
12:07:45.223 - 12:07:47.268
12:07:47.271 - 12:07:49.408
12:07:49.413 - 12:07:51.496
12:07:51.500 - 12:07:53.617
12:07:53.621 - 12:07:55.649
사용하기가 좀 불편해요.대응: import 최소화
이게 느린 것 같아.
python
>>> from DictionaryServices import *
수정 후 재측정- from DictionaryServices import *
+ from DictionaryServices import DCSCopyTextDefinition
0.3초 정도$ for word (透過性 免罪 りんご 意識 資源 apple apriori fox edit macintosh); do
echo -n `gdate +"%H:%M:%S.%3N"`
python dictionary.py $word > /dev/null
echo -n ' - '
echo `gdate +"%H:%M:%S.%3N"`
done
12:47:01.203 - 12:47:01.504
12:47:01.508 - 12:47:01.799
12:47:01.802 - 12:47:02.085
12:47:02.089 - 12:47:02.388
12:47:02.392 - 12:47:02.682
12:47:02.685 - 12:47:02.972
12:47:02.976 - 12:47:03.377
12:47:03.381 - 12:47:03.691
12:47:03.695 - 12:47:04.070
12:47:04.074 - 12:47:04.363
만족🎉2.화영사전이 국어사전보다 우선하길 희망
문제.
나는 영어를 알고 싶어서 일본어를 찾았지만 국어사전을 찾았다
$ python dictionary.py 引用
いんよう 0【引用】(名)スル① 古人の言や他人の文章,また他人の説や事例などを自分の文章の中に引いて説明に用いること。「古典の例を―する」② ポスト-モダンの芸術や建築で作品の中に過去の様式や他人の作品を部分的に組み入れる手法。〈子項目〉引用指数引用符
일본어를 설명하고 싶은 소망이 거의 없기 때문에 일본어로 화영사전에 사전을 고정시키고 싶어요.처리:매개 변수로 사전 지정(실패)
보자마자 첫 번째 파라미터가 의심스러워서 조사해 볼게요.
dictionary.py
DCSCopyTextDefinition(None, word, (0, len(word)))
DCSCopyTextDefinition | Apple Developer Documentation func DCSCopyTextDefinition(_ dictionary: DCSDictionary?,
_ textString: CFString,
_ range: CFRange) -> Unmanaged<CFString>?
지정하면 좋은데 지정하면 안 될 것 같아요.dictionary : This parameter is reserved for future use, so pass NULL. Dictionary Services searches in all active dictionaries.
대응애플리케이션 설정 변경
발견의 최초 결과를 사용한 것 같으니 이 배열을 바꾸면 해결될 거야
This function returns the description of the first matching record found in the the active dictionaries. It searches first in the default word definition dictionary which, in the English environment, is the Oxford dictionary.
사전을 찾아보았다.앱 설정에서 변경 가능
밀치락달치락하다
다시 집행한다
$ python dictionary.py 引用
いんよう 【引用】名詞(a) quotation ⦅from⦆; (a) citation ⦅from⦆. ▸ 聖書からの引用 a quotation from the Bible.▸ 引用符付きの文 a sentence in quotation marks [in quotes]. (!いずれも複数形で用いることに注意) ▸ この本は他の作品からの引用が多い This book has a lot of citations from other works. 引用する 動詞quote ; 【例として引用する】cite. (!quote は言葉をそのまま引用することで, cite は quote ほど正確な引用ではない ) ▸ ミルトンを引用する quote (from) Milton. (!from は出所を強調する) ▸ バイロンから一節を引用する quote a passage from Byron.▸ 大統領はリンカーンの言葉を引用して演説を締めくくった The President finished his speech with a quotation from Lincoln.引用句[文] a quotation ⦅話⦆ a quote / a citation.引用書 reference books / the books referred to.
일영사전 잘됐네만족하다🎉
3. 읽기 어렵다
문제.
이것은 이미 본 바와 같다
문자열이 이래요. 너무해요. 더 이상 하고 싶지 않아요?
$ python dictionary.py injection
in・jec・tion | ɪndʒékʃ(ə)n | 名詞複~s | -z | 1 U〖具体例ではan (...) ~/~s〗 注射(shot1) ▸ give A an injectionA〈人〉に注射する ▸ by injection注射によって ▸ lethal injection 毒物注射(による死刑). 2 CU(燃料などの)噴射, 注入. 3 C(資金の)投入. 4 UC(宇宙船を)軌道にのせること. ~̀ mólding 射出成形〘金属・プラスチック・セラミックを型に射出して成形する方法〙.
대응: 정규 표현식으로 방법을 강행하다
각종 시도 에서 화영사전 은 일본어 와 영어 의 경계점 과 어성 을 구분한 후 면접 에서 줄 을 바꾸고 있다
dictionary.py
def format_for_j_to_e(line):
line = re.sub(u'([ぁ-んァ-ン一-龥])\s*([a-zA-Z])', r'\1\n\2', line)
line = re.sub(u'([a-zA-Z.\)!?])\s*([ぁ-んァ-ン一-龥▸])', r'\1\n\n\2', line)
line = re.sub(u'(名詞|動詞|形容詞|副詞)', r'\1\n', line)
return '\n' + line
before$ python dictionary.py 透過
とうか 【透過】透過する 動詞〘物理〙 transmit (-tt-); 〘生物〙 permeate ⦅into; through⦆. 透過光 transmitted light.透過性 permeability.透過装置 a permeation device.
after사전.app
영일사전은 숫자 앞과 어성 앞뒤와
dictionary.py
$ python dictionary.py 透過
とうか 【透過】透過する 動詞
〘物理〙 transmit (-tt-); 〘生物〙 permeate ⦅into; through⦆.
透過光
transmitted light.
透過性
permeability.
透過装置
a permeation device.
beforedef format_for_e_to_j(line):
line = re.sub(u'([0-9] )', r'\n\n\1', line)
line = re.sub(u'(名詞|動詞|形容詞|他動詞|接頭辞|副詞)', r'\n\n\1\n ', line)
line = re.sub(u'(▸)', r'\n\1 ', line)
after사전.app
문장에
副詞の場合は〜
같은 게 나오면 바꿔도 되지만, 이렇게 개선하면 충분하죠.단어에 색칠도 할 수 있지만 난 필요 없어
만약 하고 싶다면, 줄을 바꾸는 것이 아니라, 같은 생각으로 Select Graphic Rendition을 대체할 수 있다
만족하다🎉
4. 맞춤법이 틀리면 차갑다
문제.
단어를 찾지 못하면
DCSCopyTextDefinition
되돌아오기None
python$ python dictionary.py injection
in・jec・tion | ɪndʒékʃ(ə)n | 名詞複~s | -z | 1 U〖具体例ではan (...) ~/~s〗 注射(shot1) ▸ give A an injectionA〈人〉に注射する ▸ by injection注射によって ▸ lethal injection 毒物注射(による死刑). 2 CU(燃料などの)噴射, 注入. 3 C(資金の)投入. 4 UC(宇宙船を)軌道にのせること. ~̀ mólding 射出成形〘金属・プラスチック・セラミックを型に射出して成形する方法〙.
쌀쌀하다처리:맞춤법 검사 및 재실행
이 맞춤법 검사를 사용하세요.
애플 스크립트로 CLI의 주요 사항 만들기 #맞춤법 검사
$ python dictionary.py injection
in・jec・tion | ɪndʒékʃ(ə)n |
名詞
複~s | -z |
1 U〖具体例ではan (...) ~/~s〗 注射(shot1)
▸ give A an injectionA〈人〉に注射する
▸ by injection注射によって
▸ lethal injection 毒物注射(による死刑).
2 CU(燃料などの)噴射, 注入.
3 C(資金の)投入.
4 UC(宇宙船を)軌道にのせること. ~̀ mólding 射出成形〘金属・プラスチック・セラミックを型に射出して成形する方法〙.
경로 통과 또는 배치나는
sp
라는 짧은 명령 이름으로 경로를 통과했다우선 처리
process
에서 대열 여부를 검사하다실행
>>> print DCSCopyTextDefinition(None, 'moniter', (0, len('moniter')))
None
sp
대화 방식으로 선택을 하고 다시 한 번 process
라고 부르면 되죠dictionary.py
$ osascript spelling.scpt moniter
monster, monitor, moniker
ctrl-C
로 정지하면 오류가 발생하기 때문에 except KeyboardInterrupt:
까지 def process(word):
result = look_up(word)
if re.match('[a-zA-Z]', word) is None:
- print format_for_j_to_e(result)
+ if result is None:
+ print '\nno results.'
+
+ else:
+ print format_for_j_to_e(result)
else:
- print format_for_e_to_j(result)
+ if result is None:
+ suggest_and_re_process(word)
+
+ else:
+ print format_for_e_to_j(result)
해보세요.def suggest_and_re_process(word):
suggests = filter(lambda s: s != '', commands.getoutput('sp %s' % word).split(', '))
if suggests:
print ''
for i, suggest in enumerate(suggests, 1):
print '%d: %s' % (i, suggest)
print '\n0: abort\n'
n = input('enter: ') - 1
if n != -1:
process(suggests[n])
else:
print '\nno suggests.'
- process(word)
+ try:
+ process(word)
+
+ except KeyboardInterrupt:
+ sys.exit(0)
$ python dictionary.py moniter
1: monster
2: monitor
3: moniker
0: abort
enter: 2
mon・i・tor | mɑ́(ː)nətər|mɔ́nɪ- |
動詞
~s | -z | ; ~ed | -d | ; ~ing | -t(ə)rɪŋ |
他動詞
1 〈状況など〉を監視する, 監督する, 観察する; …を追跡する; …を測定する; 〖~ that節/wh節〗 …を監視[観察]する
▸ Her blood pressure increased, so she was closely monitored. 血圧が上がり, 彼女は慎重なチェック体制の元におかれた.
# 略
만족🎉결론
거의 다 됐어요. 화영사전을 쓸 수 있어서 조금 쉽게 읽을 수 있고 힌트 기능이 생겼어요!
이렇게 하면 실물이 되나?
영어와 중국어가 비슷하다는 기사가 있었지만, 일본어 성형 대응을 찾을 수 없어 썼습니다.
공식적인 표현은 잘하지도 않고 신경 쓰지 않아서 쉽게 다가갈 수 있지만 만족스럽죠!
설치: 1, 2, 3 대응
dictionary.py
dictionary.py
$ python dictionary.py hoge
no suggests.
설치: 1, 2, 3, 4 대응
dictionary.py
dictionary.py
$ python dictionary.py ほげさん
no results.
Reference
이 문제에 관하여(터미널부터 맥 사전 사용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/suzuki_hoge/articles/2021-01-dictionary-89e394dacd278a87c53a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)