2014-01-17 5 views
0

Мне интересно, как я могу создать алгоритм, который анализирует строку для символа хэшхэга '#' и возвращает полную строку, но там, где когда-либо слово начинается с символа '#' , он становится ссылкой. Я использую python с движком Google app: webapp2 и Jinja2, и я создаю блог. Благодарясинтаксический анализ строки в python для #hashtag

+0

Мне очень жаль, что люди называют это «hashtag» now ... :( – Doorknob

+0

введите код, что бы вы здесь сделали –

ответ

0

не уверен, где вы получите данные для связи, но может быть что-то вроде:

[('<a href="...">%s</a>' % word) for word in input.split() if word[0]=='#'] 
+0

, если его первый раз, когда используется хэштаг, он сделает новый ссылка называется www.blogname.com/thehashtagthatwasused где где все одинаковые хэштеги могут быть найдены. Спасибо большое за ответ. –

0

Вы говорите о твиттере? Может быть, это?

def get_hashtag_link(hashtag): 
    if hashtag.startswith("#"): 
     return '<a href="https://twitter.com/search?q=%s">%s</a>' % (hashtag[1:], hashtag) 

>>> get_hashtag_link("#stackoverflow") 
'<a href="https://twitter.com/search?q=stackoverflow">#stackoverflow</a>' 

Он вернется None если hashtag не хэштегом.

1

Более эффективный и полный способ найти «hashwords»:

import functools 

def hash_position(string): 
    return string.find('#') 

def delimiter_position(string, delimiters): 
    positions = filter(lambda x: x >= 0, map(lambda delimiter: string.find(delimiter), delimiters)) 
    try: 
     return functools.reduce(min, positions) 
    except TypeError: 
     return -1 

def get_hashed_words(string, delimiters): 
    maximum_length = len(string) 
    current_hash_position = hash_position(string) 
    string = string[current_hash_position:] 
    results = [] 
    counter = 0 
    while current_hash_position != -1: 
     current_delimiter_position = delimiter_position(string, delimiters) 
     if current_delimiter_position == -1: 
      results.append(string) 
     else: 
      results.append(string[0:current_delimiter_position]) 
     # Update offsets and the haystack 
     string = string[current_delimiter_position:] 
     current_hash_position = hash_position(string) 
     string = string[current_hash_position:] 
    return results 

if __name__ == "__main__": 
    string = "Please #clarify: What do you #mean with returning somthing as a #link. #herp" 
    delimiters = [' ', '.', ',', ':'] 
    print(get_hashed_words(string, delimiters)) 

императива код с обновлениями стога выглядит немного некрасиво, но эй, это то, что мы получаем для (ab-) с помощью изменяемого переменные.

И я до сих пор не знаю, что вы имеете в виду, «возвращая что-то в качестве ссылки».

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

+0

Спасибо за ваш ответ. То, что я имел в виду под ссылкой, - это слово, которое можно щелкнуть. Теги в html. –

+0

@ user3205040 прокомментировал ваш комментарий. Пожалуйста, обновите свой вопрос с помощью этой информации, это основа культуры Stackexchange. Во всяком случае, просто используйте мой get_ha shed_words, затем сделайте список, который он возвращает, чтобы быть уникальным (не содержащий двойных элементов), затем запросите базу данных существующих хеджевых слов, добавив новый хеш-слово, если необходимо, затем добавьте информацию о рассматриваемой статье, чтобы обозначить, что эта статья содержит эти хэштеги. – DMunchkin

Смежные вопросы