[ad_1]
Trong khi chúng tôi nhập dữ liệu từ API, chúng tôi sẽ áp dụng một số tiêu chí. Đầu tiên, chúng tôi sẽ chỉ nhập các tài liệu có năm từ 2016 đến 2022. Chúng tôi muốn ngôn ngữ khá mới vì các thuật ngữ và phân loại của một số chủ đề có thể thay đổi theo thời gian dài.
Chúng tôi cũng sẽ thêm các thuật ngữ chính và tiến hành nhiều tìm kiếm. Mặc dù thông thường chúng tôi có thể sẽ thu thập các lĩnh vực chủ đề ngẫu nhiên, chúng tôi sẽ sử dụng các thuật ngữ chính để thu hẹp tìm kiếm của mình. Theo cách này, chúng tôi sẽ có ý tưởng về số lượng chủ đề cấp cao mà chúng tôi có và có thể so sánh với đầu ra của mô hình. Dưới đây, chúng tôi tạo một hàm mà chúng tôi có thể thêm các thuật ngữ chính và tiến hành tìm kiếm thông qua API.
import pandas as pd
import requests
def import_data(pages, start_year, end_year, search_terms):"""
This operate is used to make use of the OpenAlex API, conduct a search on works, a return a dataframe with related works.
Inputs:
- pages: int, variety of pages to loop by way of
- search_terms: str, key phrases to seek for (should be formatted in keeping with OpenAlex requirements)
- start_year and end_year: int, years to set as a variety for filtering works
"""
#create an empty dataframe
search_results = pd.DataFrame()
for web page in vary(1, pages):
#use paramters to conduct request and format to a dataframe
response = requests.get(f'https://api.openalex.org/works?web page={web page}&per-page=200&filter=publication_year:{start_year}-{end_year},kind:article&search={search_terms}')
knowledge = pd.DataFrame(response.json()('outcomes'))
#append to empty dataframe
search_results = pd.concat((search_results, knowledge))
#subset to related options
search_results = search_results(("id", "title", "display_name", "publication_year", "publication_date",
"kind", "countries_distinct_count","institutions_distinct_count",
"has_fulltext", "cited_by_count", "key phrases", "referenced_works_count", "abstract_inverted_index"))
return(search_results)
Chúng tôi tiến hành 5 cuộc tìm kiếm khác nhau, mỗi cuộc là một lĩnh vực công nghệ khác nhau. Các lĩnh vực công nghệ này được lấy cảm hứng từ “Lĩnh vực công nghệ quan trọng” của DoD. Xem thêm tại đây:
Sau đây là ví dụ về tìm kiếm sử dụng cú pháp OpenAlex bắt buộc:
#seek for Trusted AI and Autonomy
ai_search = import_data(35, 2016, 2024, "'synthetic intelligence' OR 'deep be taught' OR 'neural internet' OR 'autonomous' OR drone")
Sau khi biên soạn các tìm kiếm của chúng tôi và loại bỏ các tài liệu trùng lặp, chúng tôi phải dọn dẹp dữ liệu để chuẩn bị cho mô hình chủ đề của chúng tôi. Có 2 vấn đề chính với đầu ra hiện tại của chúng tôi.
- Tóm tắt được trả về dưới dạng chỉ mục đảo ngược (do lý do pháp lý). Tuy nhiên, chúng ta có thể sử dụng chúng để trả về văn bản gốc.
- Khi chúng ta có được văn bản gốc, nó sẽ thô và chưa được xử lý, tạo ra nhiễu và làm tổn hại đến mô hình của chúng ta. Chúng ta sẽ tiến hành xử lý trước NLP theo truyền thống để chuẩn bị cho mô hình.
Dưới đây là một hàm trả về văn bản gốc từ một chỉ mục đảo ngược.
def undo_inverted_index(inverted_index):"""
The aim of the operate is to 'undo' and inverted index. It inputs an inverted index and
returns the unique string.
"""
#create empty lists to retailer uninverted index
word_index = ()
words_unindexed = ()
#loop by way of index and return key-value pairs
for ok,v in inverted_index.gadgets():
for index in v: word_index.append((ok,index))
#type by the index
word_index = sorted(word_index, key = lambda x : x(1))
#be part of solely the values and flatten
for pair in word_index:
words_unindexed.append(pair(0))
words_unindexed = ' '.be part of(words_unindexed)
return(words_unindexed)
Bây giờ chúng ta đã có văn bản thô, chúng ta có thể thực hiện các bước xử lý trước truyền thống, chẳng hạn như chuẩn hóa, loại bỏ từ dừng, phân loại từ nguyên, v.v. Dưới đây là các hàm có thể được ánh xạ vào danh sách hoặc một loạt tài liệu.
def preprocess(textual content):"""
This operate takes in a string, coverts it to lowercase, cleans
it (take away particular character and numbers), and tokenizes it.
"""
#convert to lowercase
textual content = textual content.decrease()
#take away particular character and digits
textual content = re.sub(r'd+', '', textual content)
textual content = re.sub(r'(^ws)', '', textual content)
#tokenize
tokens = nltk.word_tokenize(textual content)
return(tokens)
def remove_stopwords(tokens):"""
This operate takes in a listing of tokens (from the 'preprocess' operate) and
removes a listing of stopwords. Customized stopwords may be added to the 'custom_stopwords' listing.
"""
#set default and customized stopwords
stop_words = nltk.corpus.stopwords.phrases('english')
custom_stopwords = ()
stop_words.lengthen(custom_stopwords)
#filter out stopwords
filtered_tokens = (phrase for phrase in tokens if phrase not in stop_words)
return(filtered_tokens)
def lemmatize(tokens):"""
This operate conducts lemmatization on a listing of tokens (from the 'remove_stopwords' operate).
This shortens every phrase all the way down to its root type to enhance modeling outcomes.
"""
#initalize lemmatizer and lemmatize
lemmatizer = nltk.WordNetLemmatizer()
lemmatized_tokens = (lemmatizer.lemmatize(token) for token in tokens)
return(lemmatized_tokens)
def clean_text(textual content):"""
This operate makes use of the beforehand outlined features to take a string and
run it by way of your complete knowledge preprocessing course of.
"""
#clear, tokenize, and lemmatize a string
tokens = preprocess(textual content)
filtered_tokens = remove_stopwords(tokens)
lemmatized_tokens = lemmatize(filtered_tokens)
clean_text = ' '.be part of(lemmatized_tokens)
return(clean_text)
Bây giờ chúng ta đã có một loạt tài liệu được xử lý trước, chúng ta có thể tạo mô hình chủ đề đầu tiên!
[ad_2]
Source link