Теоретически обоснованная версия того, что вы пытаетесь сделать, называется Ахо-Корасик . Реализация суффиксных ссылок является довольно сложной задачей IIRC, так что вот алгоритм, который просто использует три.
Мы употребляем текст по буквам. Мы всегда поддерживаем набор узлов в дереве, где может быть проход. Первоначально этот набор состоит только из корневого узла. Для каждой буквы мы перебираем узлы в наборе, спускаясь по новой букве, если это возможно. Если получающийся узел совпадает, замечательно, сообщите об этом. Независимо от этого, поместите его в следующий набор. Следующий набор также содержит корневой узел, так как мы можем начать новое сопоставление в любое время.
Вот моя попытка быстрой реализации на Python (без проверки, без гарантии и т. Д.).
class Trie:
def __init__(self):
self.is_needle = False
self._children = {}
def find(self, text):
node = self
for c in text:
node = node._children.get(c)
if node is None:
break
return node
def insert(self, needle):
node = self
for c in needle:
node = node._children.setdefault(c, Trie())
node.is_needle = True
def count_matches(needles, text):
root = Trie()
for needle in needles:
root.insert(needle)
nodes = [root]
count = 0
for c in text:
next_nodes = [root]
for node in nodes:
next_node = node.find(c)
if next_node is not None:
count += next_node.is_needle
next_nodes.append(next_node)
nodes = next_nodes
return count
print(
count_matches(['red', 'hello', 'how are you', 'hey', 'deployed'],
'hello, This is shared right? how are you doing tonight'))
Google AppEngine предлагает намного больше функциональности (и сложность), чем Вам будет нужно, если действительно все, что Вы захотите сделать, будет, переиздают некоторые структурированные данные как RSS. Лично, я использовал бы что-то как каналы Yahoo для задачи как это.
Это сказанное..., если Вы хотите/нуждаетесь намочить ноги с GAE, пойдите для него!
Работа с Google App Engine является довольно прямой. Я рекомендовал бы пройти Руководство по началу работы. Это коротко и просто и затрагивает существенные темы GAE. Существует больше за и против, чем я перечислю здесь.
Профессионалы:
В целом Механизм Приложения разработан для веб-приложений интенсивного трафика, которые должны масштабироваться. Кроме того, это разработано с точки зрения программиста. С большой частью проблем масштабируемости (оптимизация базы данных, администрирование сервера, и т.д.) имеет дело Google. Однако я нахожу, что это хорошая платформа. Это все еще активно разрабатывается инженерами Google, и планирующей задач (функция, которую долго требовали), находится в текущем плане действий.
Недостатки:
Возможно, самая большая оборотная сторона прямо сейчас является снова отсутствием официальной поддержки планирования и пределов квоты, в настоящее время устанавливаемых для бесплатных учетных записей. Однако Вы не можете жаловаться очень если его свободное. В настоящее время это только поддерживает Python как интерфейс программирования (хотя новый язык [Java, который я предсказываю], прибывает скоро). Кроме того, Python 2.6 (и 3.0 в этом отношении) еще не поддерживается. Кроме того, Django 1.0 официально не поддерживается в Механизме Приложения (хотя можно упаковать Django 1.0 с приложением).
Тяжелее, чем он был бы в большинстве других технологий.
GAE может отсортировать, делают запланированный пакетный материал как это теперь, но он действительно не предназначается для того типа вещи. Выберите в значительной степени любой другой язык и платформу для этой конкретной задачи, и Вы сделаете свою жизнь намного легче.
Я думаю, что BeautifulSoup мог работать на GAE, таким образом, все Ваши потребности очистки обрабатываются :D Кроме того, GAE имеет geturl штуку. Единственная проблема я думаю, что Вы могли бы иметь, не имеет достаточного количества времени для получения данных (30 secs ограничений).
Я работаю над тем же проектом, и я решил, что легче подготовить данные по другому серверу и продвинуть их к GAE.