Как стать автором
Обновить

Практическое применение Dictionary Services в OS X 10.5

Время на прочтение3 мин
Количество просмотров808
Я хочу рассказать о сервисе справочников и словарей, идущего в комплекте с OS X. О существовании этого сервиса можно убедиться через пунк «Loop up in dictionary» практически в любом всплывающем меню. Достаточно выделить интересующее слово, вызвать меню и выбрав данный пункт быстро и в удобной форме получить такую информацию как значение слова, его часть речи, слова синонимы и историю его происхождения. Данные собираются из всех доступных словарей (в том числе и из wikipedia) и отображаются на одной странице. Количество словарей и прочие параметры выставляются через программу настройки данного сервиса. Я, к примеру, настроил себе русскоязычную wiki.

Для продвинутого юзера данный сервис предоставляет набор интерфейсов, поэтому применив к этому знание Python или Ruby пользователь может делать различный набор аналитических и статистических вещей над текстом, будь-то определение словарного запаса автора на основе его книг и статей, поиск архаизмов а так же разбор предложений на части речи «сущ + гл + предлог». К примеру можно узнать, что в среднем женщины больше чем мужчины используют глагололы, а последние — существительные.

Не знающему английский язык этот сервис может служить в роли переводчика. К примеру, перед чтением новой статьи или книги, можно написать скрипт, который составляет список слов в тексте, сортирует их в порядке частоты повторения и находит перевод для наиболее часто встречающихся. Распечатав этот лист слов, чтение статей в метро или в электричке становится менее утомительным. Чтобы отфильтровать простые слова, слова которые вы знаете — достаточно применить к этому списку набор слов вашего вокабуляря, ваш словарь, который без особого труда можно сгенерировать. Таким образом вы можете постоянно обновлять свой вокабуляр, следить за его ростом и вашим прогрессом.

Внизу приведен набор ф-ций предоставляемый DictionaryServices.

Поиск в словарях:

* DCSGetTermRangeInString
* DCSCopyTextDefinition

Отображение результатов:

* HIDictionaryWindowShow

Я не буду разбирать каждый метод в отдельности и обращу внимание лишь на наиболее, на мой взгляд полезный — DCSCopyTextDefinition

CFStringRef DCSCopyTextDefinition (
DCSDictionaryRef dictionary,
CFStringRef textString,
CFRange range
);


Параметры:
   dictionary — Этот параметр зарезервирован для будущего использования, поэтому указывайте как NULL ( поиск происходит по всем активным словарям)
   textString — Текст который содержит слово или фразу вы хотите найти в словаре
   range — Диапозон который указывает позицию слова или фразы в textString. Если textString содержит в себе лишь одно слово, то range будет [0, length(word)]
   Return Value — Представляет собой результат выполнения, который представлен как CFStringRef

Внизу небольшой пример, демонстрирующий вызов данного метода в Python.

>>> import DictionaryServices
>>> word = "sex"
>>> meaning = DictionaryServices.DCSCopyTextDefinition(None, word, (0,len(word) ))
>>> meaning
u'noun \n1 (chiefly with reference to people) sexual activity, including specifically sexual intercourse \n2 either of the two main categories (male and female) into which humans and most other living things are divided on the basis of their reproductive functions \nverb \n1 determine the sex of \n2 ( sex someone up) arouse or attempt to arouse someone sexually. \n'
>>>


Еще один простой пример, показывающий как можно найти сочитания «глагол + предлог» в тексте, их сортировка и вывод на экран.

# Copyright © 2008 __MyCompanyName__. All rights reserved.
import DictionaryServices
import re
from operator import itemgetter

file = open('terry.txt','r')

words = {}
buf = [None,None]
counter = -1
verbs_prepos = {}

for line in file:
  for word in re.split('\W+',line.lower()):
   counter += 1

   if word not in words:
    words[word] = [1, DictionaryServices.DCSCopyTextDefinition(None, word, (0,len(word) ))]
   else:
    words[word][0] += 1

   meaning = words[word][1]

   if meaning is None or len(word) < 2 or word in [«to»,«as»,«about»,«so»,«not»,«for»,«like»]:
    buf[counter%2] = None
    continue

   buf[counter%2] = [word, meaning]

   prev_word = buf[(counter-1)%2]

   if prev_word is not None and re.search("(^adverb)|(^preposition)", meaning[0:15]) and re.search("(^past)|(^verb)", prev_word[1][0:15]):
    str = prev_word[0] + " " + word

    if str not in verbs_prepos:
     verbs_prepos[str] = 1
    else:
     verbs_prepos[str] += 1

items = verbs_prepos.items()
items.sort(lambda x, y: cmp(y[1], x[1]))

for word in items:
  print word[0], " — ", word[1]

Output:

looked up — 50
think of — 40
let out — 39
born with — 39
thought of — 39
look at — 37
get out — 34
came up — 20
make out — 20
asked in — 20
rose up — 19

Надеюсь что кому-нибудь так же найдет этот сервис полезным, каким его нашел я.
Теги:
Хабы:
+8
Комментарии1

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн