Образцы Манипуляции Строки - PullRequest
6 голосов
/ 04 сентября 2011

Просто интересно, есть ли набор шаблонов проектирования для сложных манипуляций со строками?

В основном проблема, которую я пытаюсь решить, заключается в том, что мне нужно иметь возможность читать строки, например:

"[name_of_kicker], похоже, делает штрафной удар, но находится под некоторым реальным давлением со стороны игроков [name_of_defending_team]. Он получает удар [length_of_kick], но он полностью соприкасается."

или

"[name_of_kicker] получает мяч от [name_of_passer] и запускает бомбу. [Name_of_kicker] действительно установил хороший контакт, ему дается пара преследователей [name_of_attacking_team] достаточно времени, чтобы попасть под мяч, когда он падает."

И замените каждый "tag" возможным значением и проверьте, равна ли строка другой строке.

Так, например, любой тег, представляющий игрока, мне нужно заменить на любое из 22 строковых значений, представляющих игрока. Но мне также нужно быть в состоянии убедиться, что я прокрутил каждую комбинацию игроков для различных тегов, которые я могу найти в строке. ПРИМЕЧАНИЕ: теги, перечисленные в 2 приведенных выше примерах, не являются единственными возможными тегами, существует множество других тегов, которые могут встречаться в любом предложении.

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

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

Ответы [ 3 ]

1 голос
/ 04 сентября 2011

Во-первых, чтобы ответить на ваш вопрос.

Просто интересно, есть ли набор шаблонов проектирования для сложных манипуляций со строками?

Не совсем. Есть некоторые методы, но они вряд ли можно квалифицировать как шаблоны проектирования . На ум приходят две техники: расширение шаблона и сопоставление с шаблоном.

То, что вы сейчас делаете / предлагаете, это форма расширения шаблона. Однако типичные движки шаблонов не поддерживают комбинаторное расширение, которое вы пытаетесь сделать, и, как вы ожидаете, это будет неэффективным способом решения вашей проблемы.

Лучшей техникой могло бы стать сопоставление с образцом. Давайте возьмем ваш первый пример и превратим его в шаблон:

"(Роналдино | Марадонна | Питер Шилтон | Джеки Чарлтон), похоже, выбивает мяч из штрафной, но находится под некоторым реальным давлением со стороны игроков (Эвертон | Реал Мадрид | Аделаида Юнайтед). Он получает ([0-9] + метр), но он полностью соприкасается. "

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


Сказав, что, если вы пытаетесь сделать это для «анализа» текста, я не оцениваю ваши шансы на успех. Я думаю, вам лучше пойти по маршруту НЛП.

1 голос
/ 04 сентября 2011

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

Два популярных для Java:

Но есть много , много больше, конечно.

0 голосов
/ 07 мая 2017

МОИ два цента, как вы заявили "Я только что создал один вложенный цикл for внутри другого, и он стал неуправляемым"

Вы смотрите не в ту сторону, мой друг, существует целая вселенная решений проблемы, с которой вы сталкиваетесь, просто известная как механизм правил . Существуют различные типы механизмов правил (механизмы бизнес-правил, механизмы веб-шаблонов и т. Д.), Но для вышеуказанного требования я предлагаю механизмы бизнес-правил.

Не могу прокомментировать, какой использовать, так как это зависит от

  1. Многопоточность.
  2. Открытый исходный код / ​​Коммерческая.
  3. Коэффициент загрузки / Время обработки и т. Д.

Надеюсь, это поможет

http://ratakondas.blogspot.in/2012/06/business-rules-engines-white-paper.html [прочитайте итоговый раздел, который дает лучший совет.]

https://en.wikipedia.org/wiki/Business_rules_engine#Types_of_rule_engines https://en.wikipedia.org/wiki/Comparison_of_web_template_engines

Добро пожаловать в мир правил двигателей:)

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