PubMed veröffentlicht Abstracts von Artikeln, aber es ist sehr mühsam, die Abstracts von Hunderten oder Tausenden von Berichten manuell nachzuschlagen.
Daher werden wir in diesem Artikel die Wortwolke für das Text Mining einer großen Anzahl von Papieren verwenden. Mit WordCloud können Sie herausfinden, welche Wörter in Ihren Artikeln häufig verwendet werden.
Die gesamte Analyse in diesem Artikel wurde in Google Colaboratory implementiert.
Dieses Mal werde ich 1000 Artikel analysieren, aber es wäre Zeitverschwendung, sie einzeln manuell herunterzuladen, sodass ich sie automatisch durch Programmierung herunterladen lasse.
Installieren Sie zuerst Biopython.
!pip install biopython
Laden Sie anschließend Biopython und registrieren Sie Ihre E-Mail-Adresse.
from Bio import Entrez
Entrez.email = "Meine Email-Adresse"
Geben Sie das Schlüsselwort an, nach dem Sie suchen möchten. Die Suchergebnisse für diese Schlüsselwörter werden in der Variablen pmids im Listenformat gespeichert.
term = "covid-19 age risk"
handle = Entrez.esearch(db="pubmed", term=term, retmax=1000)
record = Entrez.read(handle)
pmids = record["IdList"]
Von den Suchergebnissen wurde nur PMID in pmids gespeichert. PMID ist die Identifikationsnummer des in PubMed gespeicherten Artikels.
Geben Sie als Nächstes die PMID ein und erstellen Sie eine Funktion, um die Zusammenfassung des Papiers zu erhalten.
def get_abstract(pmid):
try:
handle = Entrez.efetch(db="pubmed", id=pmid, rettype="medline", retmode="xml")
return " ".join(Entrez.read(handle)["PubmedArticle"][0]["MedlineCitation"]["Article"]["Abstract"]["AbstractText"])
except:
return "emoriiin979"
PubMed speichert auch Papiere, die keine Abstracts enthalten, und beim Versuch, AbstractText-Schlüsseldaten von ihnen abzurufen, wird eine Fehlermeldung angezeigt. Daher habe ich meinen Namen ausgegeben, wenn keine Abstracts vorhanden sind.
Auf diese Weise funktioniert es einwandfrei, wenn ich später spezifiziere, dass mein Name nicht für die Analyse verwendet werden soll.
Verwenden wir nun diese Funktion, um auf die PubMed-API zuzugreifen und das Wesentliche abzurufen.
from tqdm import tqdm
from time import sleep
text = ""
for i in tqdm(range(len(pmids))):
text += " " + get_abstract(pmids[i])
sleep(0.5)
Um diesmal eine Wortwolke mit der Wortwolkenbibliothek zu erstellen, werden die Abstracts von 994 Berichten (6 Berichte hatten kein Abstract) in einer Zeichenfolge zusammengefasst.
Da für jeden Zugriff auf PubMed eine Pause von 0,5 Sekunden eingelegt wird, dauert es ungefähr 20 Minuten, um 1000 Berichte zu erfassen.
Jetzt, da wir die Zeichenfolgen für die Analyse haben, ist es Zeit, die Wortwolke zu erstellen.
Laden Sie zunächst das Wörterbuch herunter, mit dem die Bibliothek geladen und analysiert wird.
import nltk
from nltk import tokenize
from nltk import stem
from nltk.corpus import stopwords
nltk.download("punkt")
nltk.download("wordnet")
nltk.download("stopwords")
Als nächstes wird die Zeichenfolge in Wörter zerlegt (tokenisiert).
Wenn Sie beispielsweise die Zeichenfolge "Ich mag einen Apfel" angeben, wird sie in ["Ich", "Gefällt mir", "Ein", "Apfel", "."] Zerlegt.
words = tokenize.word_tokenize(text)
filtered_words = [w for w in words if w not in stopwords.words("english")]
Hier entfernen wir auch Wörter (Stoppwörter), die in der Analyse nicht verwendet werden.
Als nächstes werden wir die Wörter (Stichwörter) lemmaisieren. Wenn Sie beispielsweise das Wort "Äpfel" angeben, wird es in "Apfel" umgewandelt.
lemmatizer = stem.WordNetLemmatizer()
lem_text1 = ""
for word in filtered_words:
lem_text1 += lemmatizer.lemmatize(word) + " "
Damit ist die Normalisierung der für die Analyse verwendeten Wortliste abgeschlossen.
Erstellen Sie schließlich eine Wortwolke mit der Wortwolkenbibliothek.
from wordcloud import WordCloud
wc1 = WordCloud(background_color="white", width=600, height=400, min_font_size=15)
wc1.generate(lem_text1)
wc1.to_file("wordcloud1.png ")
Die erstellte Wortwolke lautet wie folgt.
In dieser Abbildung ist die größere Schriftgröße das Wort, das häufig im Papier vorkommt.
Da diesmal "covid-19" im Suchbegriff enthalten ist, ist die Häufigkeit des Auftretens von "COVID" und "CoV" natürlich hoch.
Es ist natürlich, dass Wörter wie "COVID" und "CoV" ausgegeben werden, und da dies weniger wichtige Informationen sind, möchte ich diese Wörter von der Analyse ausschließen.
Wählen Sie zunächst die Wörter aus der aktuellen Wortwolke aus, die Sie nicht benötigen.
more_stopwords = [
"patient",
"study",
"infection",
"pandemic",
"result",
"coronavirus",
"among",
"outcome",
"data",
"may",
"included"
]
Entfernen Sie dann diese Wörter aus gefilterten Wörtern und erstellen Sie die Wortwolke neu.
lem_text2 = ""
for word in filtered_words:
tmp = lemmatizer.lemmatize(word)
if tmp not in more_stopwords:
if "COVID" not in tmp and "CoV" not in tmp:
lem_text2 += tmp + " "
wc2 = WordCloud(background_color="white", width=600, height=400, min_font_size=15)
wc2.generate(lem_text2)
wc2.to_file("wordcloud2.png ")
Bei "COVID" und "CoV" werden Teilübereinstimmungen einzeln ausgeschlossen, da es zu Notationsschwankungen wie "COVID-19" kommt und genaue Übereinstimmungen nicht ausgeschlossen werden konnten.
Das Ergebnis des Ausschlusses dieser Wörter ist wie folgt.
Das zuvor ausgewählte Wort scheint bis zu einem gewissen Grad ausgeschlossen zu sein.
Wenn wir diesen Vorgang wiederholen, scheinen wir schließlich in der Lage zu sein, eine Wortwolke nur mit den erforderlichen Wörtern zu erstellen.
In diesem Artikel haben wir Biopython und WordCloud verwendet, um die Häufigkeit der Verwendung von Wörtern in der Zusammenfassung von PubMed zu analysieren.
Was den Eindruck dieser Analyse angeht, hatte ich das Gefühl, dass die Genauigkeit der Tokenisierung und des Lemmings von NLTK etwas schlecht war.
Bei der Tokenisierung konnten Kommas (,) und Punkte (.) Nicht entfernt werden, und bei der Lemmaisierung konnten "Begleitungen" nicht in "Begleitungen" konvertiert werden und wurden so ausgegeben, wie sie waren. Verbessern Sie daher diese Genauigkeit. Ich denke, das ist ein zukünftiges Problem.
Neben der Wortwolke scheint es andere Analysemethoden für die Häufigkeit des Auftretens von Wörtern zu geben, daher möchte ich diese auch untersuchen und verwenden.
das ist alles.
Recommended Posts