Wikipedia API

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

Hi,
ich arbeite gerade mit der Wikipedia API und habe da einige Probleme.

Code: Alles auswählen


wiki_wiki = wikipediaapi.Wikipedia('de')
question = input("Was suchst du?")
page_py = wiki_wiki.page(question)
ans = page_py.summary
print(ans)
Laut der Dokumentation soll man den Parameter sentences=1 hinzufügen können. Es soll dann so aussehen:

Code: Alles auswählen

wiki_wiki = wikipediaapi.Wikipedia('de')
question = input("Was suchst du?")
page_py = wiki_wiki.page(question)
ans = page_py.summary(sentences=1)
print(ans)
Führe ich den Code aber aus kommt diese Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "c:\Users\Salami\Documents\Sprachasistent\Skripte\testa.py", line 5, in <module>
    ans = page_py.summary(sentences=1)
TypeError: 'str' object is not callable
Ich habe schon vieles versucht und gebe Langsam auf.

Noch eine Frage, kann man die Klammern herausfiltern? Am besten gleich mit dem Text.
Thx
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Bio Salami,
Laut der Dokumentation soll man den Parameter sentences=1 hinzufügen können. Es soll dann so aussehen:
Kannst du mal verlinken wo du das gelesen hast?

page_py.summary ist ein String. Den kann man nicht wie eine Funktion aufrufen.

oder meinst du das:

Code: Alles auswählen

print(wiki_wiki.extracts(page_py, exsentences=1))
AlexL
User
Beiträge: 16
Registriert: Donnerstag 5. August 2021, 10:38

An diesem (sentences=1) habe ich mir auch die Zähne ausgebissen. Keine Ahnung wie das funktionieren soll.

Um nur den ersten Satz der Summery anzuzeigen, habe ich mir so beholfen:

Code: Alles auswählen

import wikipediaapi
wiki_wiki = wikipediaapi.Wikipedia('en')
question = input("Was suchst du?")
page_py = wiki_wiki.page(question)
summary_string = page_py.summary
end_position = summary_string.find('.') 
first_sentence = summary_string[0:end_position + 1]
print(first_sentence)
Benutzeravatar
__blackjack__
User
Beiträge: 14057
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AlexL: Wobei das nicht zuverlässig ist. Sollte beispielsweise im ersten Satz eine Abkürzung stehen, dann ist da ja auch mindestens ein Punkt, aber eben nicht am Ende des Satzes. An der Stelle wird eventuell auch klar, warum das gar nicht wirklich funktionieren kann, denn dieses Problem hätte Wikipedia selbst ja auch.

Warum sage ich ”hätte” — es hat das auch:

Code: Alles auswählen

In [48]: wp = wikipediaapi.Wikipedia("de")                                      

In [49]: p = wp.page("Python")                                                  

In [50]: wp.extracts(p, exsentences=1)                                          
Out[50]: 'Python (altgriechisch Πύθων) steht für:\n\nPython (Mythologie), einen Drachen in der griechischen Mythologie\nPythons (Pythonidae), eine Familie großer Schlangen\nEigentliche Pythons (Python), eine Gattung aus der Familie der Pythons\nPython (Programmiersprache), eine Programmiersprache\nMonty Python, eine britische Komikergruppe\nPython (Schiff, 1935), ein Kühlschiff und U-Boot-Versorger\nPython – Lautlos kommt der Tod, einen US-amerikanischen Horrorfilm aus dem Jahr 2000\nPythons 2, einen US-amerikanischen Horrorfilm aus dem Jahr 2001\neinen Vornamen, siehe Peithon\nPython Vehicles Australia, einen australischen Hersteller von AutomobilenPersonen:\n\nPython von Ainos in Thrakien, Schüler Platons, ermordete 360/59 v.'
Ist also ein bisschen mit Vorsicht zu geniessen diese Funktion.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Wie ich gerade feststelle, kommt die Verwirrung dadurch, dass es zwei wikipedia packages für Python gibt.

Die hier:
https://pypi.org/project/wikipedia/
verwendet 'sentences'

Die hier:
https://pypi.org/project/Wikipedia-API/
verwendet 'exsentences'

Die Dokumentation der ersten hilft einem natürlich nicht wenn man die zweite verwendet.
AlexL
User
Beiträge: 16
Registriert: Donnerstag 5. August 2021, 10:38

__blackjack__ hat geschrieben: Donnerstag 12. August 2021, 14:48 @AlexL: Wobei das nicht zuverlässig ist. Sollte beispielsweise im ersten Satz eine Abkürzung stehen, dann ist da ja auch mindestens ein Punkt, aber eben nicht am Ende des Satzes. An der Stelle wird eventuell auch klar, warum das gar nicht wirklich funktionieren kann, denn dieses Problem hätte Wikipedia selbst ja auch.
@ __blackjack__: Ja, genau diese Gedanken hatte ich auch und mich dann für die Suche nach dem Punkt entschieden.

Da sind wir wieder an dem Punkt, wo man gern genauer wissen möchte, welches sinnige Vorhaben der Fragende im Kopf hat.

Btw. jetzt, wo ich die API schon mal installiert habe, hat jemand eine schöne Idee, was ich damit machen könnte? Möglichst in Verbindung mit Tkinter.
AlexL
User
Beiträge: 16
Registriert: Donnerstag 5. August 2021, 10:38

rogerb hat geschrieben: Donnerstag 12. August 2021, 15:25 Wie ich gerade feststelle, kommt die Verwirrung dadurch, dass es zwei wikipedia packages für Python gibt.

Die hier:
https://pypi.org/project/wikipedia/
verwendet 'sentences'

Die hier:
https://pypi.org/project/Wikipedia-API/
verwendet 'exsentences'

Die Dokumentation der ersten hilft einem natürlich nicht wenn man die zweite verwendet.
Danke für die Info. Ich habe da nicht genauer nachgeschaut, mich aber gewundert, dass bei einigen Beispielen wikipedia importiert wird und bei anderen wikipediaapi.

Solchen "Komischkeiten" gehe ich meist nicht nach. Ich versteh auch nicht, warum man oft print "text" liest. Bei mir meckert Python. Dann bekommt der Text eine Klammer und gut ist. :-)

Schönen Abend noch allen zusammen.
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

Danke für die Schnellen Antworten,
Ich hatte tatsächlich die andere Wikipedia API verwendet. Jetzt funktioniert es!

Hat jemand noch eine Idee wie ich die Klammern und ihren Inhalt herausfiltern kann?
Danke!
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Bio Salami
Hat jemand noch eine Idee wie ich die Klammern und ihren Inhalt herausfiltern kann?
Grundätzlich ginge das so zum Beispiel, also über reguläre Ausdrücke:

Code: Alles auswählen

import re

text = "text (mit einigen) Klammern (also ein paar)(nicht so viele)."
regex = re.compile(r"\(.*?\)")

for parenthesis_text in regex.findall(text):
    print(parenthesis_text)

"""
Ausgabe:

(mit einigen)
(also ein paar)
(nicht so viele)
"""
Vielleicht hat die API aber auch schon Funktionen für das was du machen möchtest.
Benutzeravatar
__blackjack__
User
Beiträge: 14057
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AlexL: ``print "text"`` ist Python 2. Da war ``print`` keine Funktion sondern eine Anweisung. In Python 3 ist das kein eigenes Schlüsselwort mehr mit besonderer Bedeutung, sondern eine ganz normale, eingebaute Funktion, und muss dann auch wie eine Funktion aufgerufen werden.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

rogerb hat geschrieben: Freitag 13. August 2021, 12:39 @Bio Salami
Hat jemand noch eine Idee wie ich die Klammern und ihren Inhalt herausfiltern kann?
Grundätzlich ginge das so zum Beispiel, also über reguläre Ausdrücke:

Code: Alles auswählen

import re

text = "text (mit einigen) Klammern (also ein paar)(nicht so viele)."
regex = re.compile(r"\(.*?\)")

for parenthesis_text in regex.findall(text):
    print(parenthesis_text)

"""
Ausgabe:

(mit einigen)
(also ein paar)
(nicht so viele)
"""
Vielleicht hat die API aber auch schon Funktionen für das was du machen möchtest.
Ich meine das ich eine Variable mit dem Text aber ohne die Klammern habe. Soweit ich verstanden habe werden die Klammern aus der text Variable herausgefiltert und in der regex Variable Gespeichert. Oder kann man den normalen Text auch aus der Variable auslesen?

Endschuldige wenn ich mich missverständlich ausgedrückt habe.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kann es sein, dass du eine Liste bekommst? Oder woher kommen diese Klammern?
Benutzeravatar
Bio Salami
User
Beiträge: 63
Registriert: Mittwoch 28. Juli 2021, 14:10

@__deets__ Es ist keine Liste. Es ist ein Text den ich von Wikipedia bekomme. Leider kommt die Sprachausgabe mit dem Inhalt der Klammern nicht immer zurecht, weswegen ich einen Weg suche sie zu entfernen.
Antworten