LINT для английского языка

Модуль  write-good  для NodeJS предназначен для проверки текстов на английском на «академичность» стиля. Автор поставил себе задачу автоматизацию трех проблем в научных текстах:

1. Чрезмерное использование Passive Voice. Помимо того, что большое количество пассивного залога ухудшает стиль текста, в научной статье это, как правило, связано с сокрытием существенной информации или неполноте фактов. Пример:

Плохо:        Termination is guaranteed on any input.
Лучше:       Termination is guaranteed on any input by a finite state-space.
Хорошо:     A finite state-space guarantees termination on any input.

2. Обтекамые выражения и лишние слова

Плохо:    It is quite difficult to find untainted samples.
Лучше:    It is difficult to find untainted samples.

Часто студенты в работах используют «ленивые» слова, чтобы избежать необходимости количественного описания. Например, several, exceedingly, many, most, few, vast.

Плохо:    There is very close match between the two semantics.
Лучше:    There is a close match between the two semantics.

3. Лексические иллюзии. Очень сложно заметить повторы слов, когда они разделены переносом строк.

Конечно, реализация очень несложная, но может быть интересна как раз свой простотой, чтобы понять, с чего легче начать разработку анализа текстов.

  Ссылки:

https://github.com/devd/Academic-Writing-Check

http://homepages.ed.ac.uk/martinc/msc/doc/hc.pdf

Когда использовать Parallel.ForEach, а когда PLINQ

Мой перевод статьи «When Should I Use Parallel.ForEach? When Should I Use PLINQ?», опубликованный ранее на Хабрахабре.

Введение

Обычно, при оптимизации программы для многоядерных компьютеров первым шагом является выяснение возможности разделения алгоритма на части, выполняющиеся параллельно. Если для решения задачи необходимо параллельно обрабатывать отдельные элементы из большого набора данных, то первыми кандидатами станут новые возможности параллельности в .NET Framework 4: Parallel.ForEach и Parallel LINQ (PLINQ)

Parallel.ForEach

Класс Parallel содержит метод ForEach, представляющий собой многопоточную версию обычного цикла foreach в C#. Подобно обычному foreach, Parallel.ForEach выполняет итерации над перечислимыми данными (enumerable), но с использованием множества потоков. Одна из более часто используемых перегрузок Parallel.ForEach выглядит следующим образом:

public static ParallelLoopResult ForEach<tsource>(
			 IEnumerable</tsource><tsource> source,
			 Action</tsource><tsource> body)

Ienumerable указывает на последовательность, по которой нужно выполнить итерации, а Action body задает делегат, вызываемый для каждого элемента. Полный список перегрузок Parallel.ForEach можно найти здесь.

PLINQ

Родственный с Parallel.ForEach PLINQ представляет собой модель программирования для паралелльных операций над данными. Пользователь определяет операцию из стандартного набора операторов, включающих в себя проекции, фильтры, агрегирование и т.д. Подобно Parallel.ForEach PLINQ достигает параллельности, разбивая входную последовательность на части и обрабатывая элементы в разных потоках.

В статье выделяются различия между этими двумя подходами к параллельности. Разбираются сценарии использования, в которых лучше всего использовать Parallel.ForEach вместо PLINQ и наоборот.

Выполнение независимых операций

Читать далее Когда использовать Parallel.ForEach, а когда PLINQ

Задача о назначениях — алгоритм Matlab

Часто может понадобиться решать задачу о назначениях. Например, при составлении расписания о наилучшем распределении работ между таким же числом исполнителей. При этом необходимо найти оптимальное назначение из условия максимума общей эффективности, которая равна сумме производительности исполнителей. Наиболее эффективным методом ее решения является Венгерский алгоритм. Понятно, что задача о назначениях имеет много интерпретаций: распределение груза по транспортным средствам, распределение задач для выполнения на нескольких компьютерах и т.д и т.п.Если необходимо решить такую задачу с использованием Matlab, можно воспользоваться готовой функцией munkres. Вычислительная сложность алгоритма O (n^3).

Ссылки по теме:

Работающая технология идентификации языка речи

Чешская компания Phonexia, занимающаяся  речевыми технологиями, предоставляет доступ к демонстрационным версиям программ. Например, технология идентификации языка говорящего по звуковому файлу.  Такие решения могут быть полезны при анализе больших объемов речевой информации, в call-центрах, мониторинге СМИ. После регистрации на указанный e-mail высылается ключ, по которому можно пользоваться демо-программой в течение месяца с запуском только при наличии интернета.

По умолчанию программа настроена на обработку списка файлов. Но можно настроить обработку всего каталога (например, по умолчанию process/input). Нажатие на виртуальный выключатель  запускает обработку всех файлов для анализа языка.

Само собой, что язык в демо-файлах распознается на 100%. Готовой базы для тестирования распознавания языков нет, поэтому о реальных результатах качества распознавания говорить сложно.

Превращаем картинку в звук

Попробуем заняться довольно бессмысленным занятием, а именно получением звука с определенной  спектрограммой. Вдруг ряды любителей  ЭГФ сократятся, не в обиду фанатам фильма «Белый шум» 🙂
Итак,  начнем с моделирования на Matlab. Хотим алгоритм, позволяющий переводить звук в картинку-спектрограмму и обратно. Логично будет начать с вычисления спектрограммы, по которой будет вычисляться изображение.

Читать далее Превращаем картинку в звук

Подборка ссылок по распознаванию речи

Постараюсь обновлять здесь список страниц, где можно почерпнуть информацию о распознавании речи. В основном — книги и статьи.

Ресурсы по родственной тематике:

  • corpuscul.net создание звука и музыки, психоакустика, теория звука, звукорежиссура и т.д.
  • wikisound.org — Энциклопедия звука. Статьи о звуке, обработке, записи, VST и многое другое

 

10 способов проверить число на то, что оно является степенью двойки

В статье на сайте exploringbinary.com описаны алгоритмы определения, является ли число двойкой в какой-либо степени.

Самый быстрый способ:

int isPowerOfTwo (unsigned int x)
{
return ((x != 0) && ((x & (~x + 1)) == x));
}