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

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

В настоящее время я изучаю обработку естественного языка для какой-то старой задачи классификации, которая собирала пыль в одной из моих личных электронных таблиц. Tensorflow с Keras имеет несколько хороших библиотек для предварительной обработки текста и построения нейронных сетей, подходящих для текстовых задач, например. вложенные и плотные слои. Я все еще преодолеваю крутую кривую обучения с большим количеством данных, чтобы сделать это, поэтому, вероятно, потребуется некоторое время, прежде чем я поделюсь чем-то стоящим.

Но сегодня я мог бы поговорить о чем-то более простом.

В рамках моего обучения я также параллельно работал над несколькими популярными языками программирования. Я обнаружил, что лучше учусь, когда пытаюсь понять языки в парах или небольших группах. Python и JavaScript до сих пор были двумя наиболее часто используемыми языками, учитывая мое внимание к развитию возможностей в области науки о данных и распространению информации через веб-технологии.

Допустим, мы хотим обработать предложение на английском языке.

Раздел ниже вдохновлен этим вызовом Edabit, поэтому впереди несколько частичных спойлеров!

Чтобы упростить пример, мы будем игнорировать любые знаки препинания. Рассмотрим строку "Это предложение".

Как перевернуть все предложение?

Как поменять местами отдельные слова, сохранив при этом первоначальный порядок в предложении?

В Python строковая нарезка и генератор понимание предоставляют нам инструменты для выполнения задач. И списки, и строки могут быть нарезаны. Третий ввод в операторе среза [start:stop:step] может принимать отрицательное число, указывающее, что мы хотим поменять местами символы строки, как показано в строке 1 примера кода Python ниже. .

Чтобы перевернуть отдельные слова, сохранив при этом порядок, мы могли бы преобразовать строку в генератор индивидуально перевернутых слов, прежде чем воссоединить их ниже, как показано в строке 2 ниже.

В Javascript объекты-массивы имеют метод reverse для обращения элементов внутри. Таким образом, мы преобразуем строку в массив перед тем, как изменить их местами, а затем воссоединить их. Чтобы перевернуть только слова без изменения порядка в предложении, вместо понимания Python мы будем использовать метод map для применения обратного метода слово за словом. Мы соединяем слова обратно в строку, прежде чем вернуть ее в качестве ответа.

В PHP у нас есть функции с драматическими названиями explode и implode, которые при необходимости разбивают предложение на массив слов перед применением strrev к перевернуть слова.

Манипуляции с предложениями полезны при токенизации, важном методе предварительной обработки данных, который позволяет нам преобразовывать неструктурированные текстовые данные в структурированные числовые данные, которые можно передать в подходящую модель машинного обучения, например. нейронная сеть с встраиванием и плотными слоями — для извлечения информации из информации. Такие пакеты, как NLTK, Scikit-Learn или Tensorflow, содержат функции высокого уровня, которые абстрагируются от сложности реализации алгоритмов, но было бы полезно время от времени оценивать, что происходит под капотом.