Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2012 11:52:54

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

FishHook
да, результаты разные. Что конкретно хотел ТС я так и не понял, если нужны повторяющиеся слова, то вариант с множеством лучше, если нужны пары предложений в которых есть одинаковые слова, то Ваш. Либо можно допилить мой вариант, сделав декартово произведение предложений, в которых присутствует определенное слово - тада ассимптотика будет либо хуже чем в варианте с циклами либо оверхед

Отредактировано adray (Ноя. 15, 2012 11:58:04)

Офлайн

#2 Ноя. 15, 2012 17:22:29

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

Всё, что мне нужно это поиск на совпадающие названия лекарственных средств из двух списков.

Офлайн

#3 Ноя. 15, 2012 20:38:50

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Поиск на совпадение слов

> Вы мой пример видели?

Видел, вообще не понял, что там написано :)

Офлайн

#4 Ноя. 15, 2012 20:43:08

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

adray
return set(filter(lambda w: len(w) > 2, itertools.chain(*map(lambda x: x.split(), names))))

Согласен, быть может Вы помогли бы новичку и расписали не в строчку.

Офлайн

#5 Ноя. 15, 2012 21:04:28

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

paraman
Согласен, быть может Вы помогли бы новичку и расписали не в строчку.
Давайте сначала определимся, что нужно делать. Вот у нас есть два списка слов:
names1=['Hell eggs', 'Python 3', 'foo', 'spam filter', 'dirty dirt']
names2=['Python', 'foo', 'Hell yeah', 'clean dirt', 'spam filter']
Каков должен быть результат?

Офлайн

#6 Ноя. 15, 2012 21:08:08

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

lorien
> Вы мой пример видели?Видел, вообще не понял, что там написано
Эх.. Объясню. Есть два списка лекарств:
name_list = ['Abilify', 'Aciphex', 'Actos', 'Abelcet XO', 'Adderall XR', 'Advair Diskus', 'Ambien CR', 'Abelcet XX', 'Aricept', 'Atripla', 'Avandia', 'Avapro', 'Avastin', 'Avelox', 'Avodart', 'Avonex', 'Benicar', 'Boniva', 'Byetta', 'Caduet', 'Celebrex']
name2_list = ['Aammonium alum', 'abacavir', 'abatacept', 'Abbokinase', 'abciximab-injection', 'VV Abelcet', 'Abilify', 'Abreva', 'acamprosate calcium delayed-release tablet', 'Acanya', 'acarbose', 'Accolate', 'AccuNeb', 'Accupril', 'Accuretic', 'Accutane', 'Accutrim', 'ACE Inhibitors', 'acebutolol', 'Aceon', 'Acetadote', 'acetaminophen', 'acetaminophen ', 'acetaminophen-isometheptene-dichloralphenazone', 'Acetasol', 'Acetasol HC', 'acetazolamide-oral', 'acetic acid ', 'acetic acid-otic', 'acetic acid-oxyquinoline-ricinoleic acid-vaginal', 'acetohexamide', 'acetohydroxamic acid-oral', 'acetylcysteine-inhalation', 'acetylcysteine-injection', 'acetylsalicylic acid', 'Acid', 'Aciphex', 'acitretin-oral', 'Actemra', 'Actigall', 'Actimmune', 'Actinex', 'Actiq', 'Activase', 'Actonel', 'Actos', 'Acular', 'Acular LS', 'acyclovir', 'A-Hydrocort']

В первом посте я описал способ, как я ищу, но он не всегда находит совпадения названий. В это списке, как пример лекарство Abelcet я не могу найти.

Мой результат:
[('Actos', 'Actos'), ('Abilify', 'Abilify'), ('Aciphex', 'Aciphex')]

Отредактировано paraman (Ноя. 15, 2012 21:09:00)

Офлайн

#7 Ноя. 15, 2012 21:37:35

adray
Зарегистрирован: 2012-09-15
Сообщения: 123
Репутация: +  18  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

Не один из предложенных вариантов не является общим решением этой задачи.
Например:

['Cianidium Abirvalg', 'Aspirinium tablet']
['Abirvalg Spirtium', 'Cianidium tablet']
что в этом случае должно быть результатом?
Мой вариант найдет
{'Cianidium', 'Abirvalg', 'tablet'}
Вариант Fishhook'a дополнительно отобразит все пары с полными названиями лекарств в название которых входят слова из множества.

В моем примере в множестве присутствует элемент ‘tablet’, который вообще ниочем - слово совпадает, но в разных списках он соответствует совершенно разным лекарствам.

Чтобы результат был более осмысленным, можно ввести метрику на множестве названий лекарств и с помощью нее определять степень похожести двух элементов. Но и здесь ошибки не исключены

Отредактировано adray (Ноя. 15, 2012 21:38:29)

Офлайн

#8 Ноя. 15, 2012 22:04:36

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

Весь срач начался изза неадекватного вопроса. Давайте лучше поговорим о том, где и как можно использовать аннотации к функциям.



Офлайн

#9 Ноя. 16, 2012 08:04:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

>>> def f(lst):
...     return sum(map(str.split, lst), [])
... 
>>> words1 = ['AC Python', 'Mini GO', 'IronPython .NET', 'F# .Net Good']
>>> words2 = ['Python GO', 'Java AC', 'C# .Net Good', 'VB .Net', 'PHP Shit']
>>> words3 = set(f(words1)) & set(f(words2))
>>> words4 = filter(lambda i: len(i) == 2, words3) 
>>> list(words4)
['AC', 'GO']
>>>

>>> def f(lst):
...     return sum(map(str.split, lst), [])
... 
>>> words1 = ['Abilify', 'Aciphex', 'Actos', 'Abelcet XO', 'Adderall XR', 'Advair Diskus', 'Ambien CR', 'Abelcet XX', 'Aricept', 'Atripla', 'Avandia', 'Avapro', 'Avastin', 'Avelox', 'Avodart', 'Avonex', 'Benicar', 'Boniva', 'Byetta', 'Caduet', 'Celebrex']
>>> words2 = ['Aammonium alum', 'abacavir', 'abatacept', 'Abbokinase', 'abciximab-injection', 'VV Abelcet', 'Abilify', 'Abreva', 'acamprosate calcium delayed-release tablet', 'Acanya', 'acarbose', 'Accolate', 'AccuNeb', 'Accupril', 'Accuretic', 'Accutane', 'Accutrim', 'ACE Inhibitors', 'acebutolol', 'Aceon', 'Acetadote', 'acetaminophen', 'acetaminophen ', 'acetaminophen-isometheptene-dichloralphenazone', 'Acetasol', 'Acetasol HC', 'acetazolamide-oral', 'acetic acid ', 'acetic acid-otic', 'acetic acid-oxyquinoline-ricinoleic acid-vaginal', 'acetohexamide', 'acetohydroxamic acid-oral', 'acetylcysteine-inhalation', 'acetylcysteine-injection', 'acetylsalicylic acid', 'Acid', 'Aciphex', 'acitretin-oral', 'Actemra', 'Actigall', 'Actimmune', 'Actinex', 'Actiq', 'Activase', 'Actonel', 'Actos', 'Acular', 'Acular LS', 'acyclovir', 'A-Hydrocort']
>>> words3 = set(f(words1)) & set(f(words2))
>>> words4 = filter(lambda i: len(i) == 2, words3) 
>>> list(words4)
[]
>>> words3
{'Abilify', 'Abelcet', 'Actos', 'Aciphex'}
>>>



Отредактировано py.user.next (Ноя. 16, 2012 08:10:32)

Офлайн

#10 Ноя. 16, 2012 20:26:02

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Поиск на совпадение слов

py.user.next
спасибо, но в строчку не так понятно. Буду разбираться.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version