Поиск и сопоставление элементов в массивах

У меня две таблицы.

В одной таблице есть два столбца, в одном из которых указан идентификатор, а в другом - аннотации документа длиной около 300-500 слов. Всего около 500 рядов.

Другая таблица имеет только один столбец и> 18000 строк. Каждая ячейка этого столбца содержит отдельный акроним, такой как NGF, EPO, TPO и т. д.

Меня интересует сценарий, который будет сканировать каждое резюме в таблице 1 и идентифицировать один или несколько акронимов, присутствующих в нем, которые также присутствуют в таблице 2.

Наконец, программа создаст отдельную таблицу, в которой первый столбец будет содержать содержимое первого столбца таблицы 1 (т.е. идентификатор) и акронимы, найденные в документе, связанном с этим идентификатором.

Может ли помочь кто-нибудь со знанием Python, Perl или любого другого языка сценариев?

Какие инструменты вы используете? С какой частью этого вы испытываете трудности?

Binary Worrier 19.01.2009 20:18
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
1
128
3

Ответы 3

Мне кажется, что вы пытаетесь объединить две таблицы, в которых аббревиатура встречается в аннотации. т.е. (псевдо SQL):

SELECT acronym.id, document.id
FROM acronym, document
WHERE acronym.value IN explode(documents.abstract)

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

acronyms = ['ABC', ...]
documents = [(0, "Document zeros discusses the value of ABC in the context of..."), ...]

joins = []

for id, abstract in documents:
    for word in abstract.split():
        try:
            index = acronyms.index(word)
            joins.append((id, index))
        except ValueError:
            pass # word not an acronym

Это простая реализация; однако у него есть n кубов времени выполнения, поскольку acronyms.index выполняет линейный поиск (не меньше нашего самого большого массива). Мы можем улучшить алгоритм, сначала построив хеш-индекс аббревиатур:

acronyms = ['ABC', ...]
documents = [(0, "Document zeros discusses the value of ABC in the context of..."), ...]

index = dict((acronym, idx) for idx, acronym in enumberate(acronyms))    
joins = []

for id, abstract in documents:
    for word in abstract.split():
        try
            joins.append((id, index[word]))
        except KeyError:
            pass # word not an acronym

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

Большое спасибо за быстрый ответ. Я предполагаю, что решение псевдо-SQL предназначено для MYSQL и т. д. Однако оно не работает в Microsoft ACCESS.

второй и третий, я полагаю, предназначены для Python. Могу ли я использовать аббревиатуру и документ как входные файлы? бабру

Это не сработало в Access, потому что к таблицам обращаются иначе (например, акроним. [Id])

Другие вопросы по теме