Лучший язык для большого числа сравнений строк - PullRequest
1 голос
/ 28 января 2011

Я запускаю веб-сайт, который будет собирать много данных из API Twitter. Затем я хочу найти определенные фразы в твитах, которые я получаю от API. Мне интересно, какой язык будет лучшим для этого. Большинство моих знаний о PHP, но из того, что я читал в прошлом, я больше склоняюсь к Python. Как я уже говорил, я буду искать определенные фразы, поэтому я хотел бы использовать что-то похожее на функцию strpos в PHP. Я ищу язык, который будет иметь самое быстрое время обработки. Я также буду делать много INSERT с этим кодом, но я думаю, что обработка строк будет занимать большую часть времени, поэтому я сосредоточусь на этом. Заранее спасибо за ваши ответы.

Ответы [ 3 ]

3 голосов
/ 28 января 2011

Если ваш набор поисковых терминов фиксирован, библиотека esmre для Python может быть именно тем, что вам нужно.Он использует Aho-Corasick для быстрого сопоставления подстрок с большими наборами поисковых терминов.

Вот пример, который использует esmre для поиска упоминаний некоторых языков программирования:

import esm

tweets = """
I've always loved Python.
C# is better than I thought. It's like Java done right.
My tiny mind cannot grasp Haskell.
Objective-C is like C and Smalltalk's illegitimate lovechild.
""".strip().split('\n')

search_terms = ["Python", "Ruby", "PHP", "Erlang", "Haskell", "OCaml",
    "Objective-C", "C#", "C++", "Common Lisp", "Scheme", "Java", "Smalltalk",
    " C "
]

# Build the index of search terms
index = esm.Index()

for term in search_terms:
    index.enter("%s" % term.lower(), term)

index.fix()

# Find mentions of the search terms
for tweet in tweets:
    matches = index.query(tweet.lower())
    languages = [label for (position, label) in matches]

    print "%r mentions %r" % (tweet, languages)
1 голос
/ 29 января 2011

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

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

Дополнительное значение имеет хорошая стратегия обработки твитов, и именно здесь вы можете быть убиты работой Твиттера.Что мне подходит, так это наличие процесса (или процессов на нескольких машинах), который использует многопоточный асинхронный клиент для извлечения твитов и помещения их в хранилище данных для обработки.Это исключительно ответственность за этот процесс, чтобы получить твиты из Twitter как можно быстрее.Другой многопоточный сервисный процесс отвечает за проверку извлеченных твитов на соответствие моим целевым фразам.

1 голос
/ 28 января 2011

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

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

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