Мне нужна консультация или инструкции о том, как написать алгоритм, который найдет ключевые слова или ключевые фразы в строке.
Строка содержит:
- Техническая информация, написанная на английском языке (GB)
- Слова в основном разделены пробелами
- Ключевое слово не содержит пробела, но может содержать дефис, апостроф, двоеточие и т.д.
- keyphrase может содержать пробел, запятую или другую пунктуацию
- Если два или более ключевых слова отображаются вместе, то, скорее всего, это ключевая фраза, например. "инверторный привод"
- Текст также содержит HTML, но при необходимости его можно удалить заранее
- Не-ключевые слова будут такими словами, как "и", "the", "we", "see", "look" и т.д.
- Ключевые слова не чувствительны к регистру, например. "Инвертор" и "инвертор" - это одно и то же ключевое слово
Алгоритм имеет следующие требования:
- Работайте в сценарии пакетной обработки, например. запускать один или два раза в день.
- Строки процесса, изменяющиеся по длине от примерно от 200 до 7000 символов
- Процесс 1000 строк менее чем за 1 час
- Выполняется на сервере с умеренно хорошей мощностью
- Написано в одном из следующих: С#, VB.NET или T-SQL, возможно, даже F #, Python или Lua и т.д.
- Не полагаться на список предопределенных ключевых слов или ключевых фраз
- Но может полагаться на список исключений ключевых слов, например. "и", "," идти" и т.д.
- Идеально переносимый на другие языки, например. не полагается на специфические для языка функции, например. метапрограммированием
- Вывести список ключевых фраз (порядок по убыванию), а затем список ключевых слов (по убыванию частоты)
Было бы здорово, если бы он обрабатывал до 8000 символов за считанные секунды, так что его можно было запустить в режиме реального времени, но я уже спрашиваю достаточно!
Просто ищите советы и указания:
- Должны ли это рассматриваться как два отдельных алгоритма?
- Существуют ли какие-либо установленные алгоритмы, которые я мог бы выполнить?
- Возможны ли мои требования?
Большое спасибо.
P.S. Строки будут извлекаться из базы данных SQL Server 2008 R2, поэтому в идеале язык будет поддерживать это, если не тогда, он должен иметь возможность читать/записывать в STDOUT, канал, поток или файл и т.д.