Adventskalender Erster Tag, aber schreibe etwas, das ohne besonderes Gefühl leicht zu schreiben ist
Da ich [100 Klopfen bei der Sprachverarbeitung] gelöst habe (http://www.cl.ecei.tohoku.ac.jp/nlp100/), werde ich die Antwort und den Eindruck einzeln schreiben (derzeit 23.30 Uhr, 20.30 Uhr). Der Teil, der geschrieben werden kann, ist also der erste Teil.
--Umgebung
Ich musste den Code selbst noch einmal lesen, um diesen Artikel zu zeichnen, also war es eine Pseudocode-Überprüfung
und
'`Es wurden viele Verbesserungen gefunden
Holen Sie sich eine Zeichenfolge, in der die Zeichen der Zeichenfolge "betont" umgekehrt angeordnet sind (vom Ende bis zum Anfang).
## 00
smt = "stressed"
ans = ""
for i in range(len(smt)):
ans += smt[-i - 1]
print(ans)
Der Schreibstil, den ich nicht kannte, ist ↓
## 00
smt = "stressed"
smt[::-1]
Mit anderen Worten, es war "Liste [Start: Stopp: Schritt]"
Nehmen Sie das 1., 3., 5. und 7. Zeichen der Zeichenkette "Patatokukashi" heraus und erhalten Sie die verkettete Zeichenkette.
## 1
smt = "Patatoku Kashii"
''.join([smt[i] for i in range(len(smt)) if i % 2==0])
Ich wusste es zu diesem Zeitpunkt noch nicht, also werde ich es auch umschreiben ↓
## 1
smt = "Patatoku Kashii"
smt[::2]
Erhalten Sie die Zeichenkette "Patatokukashi", indem Sie die Zeichen "Pattocar" + "Tax" von Anfang an abwechselnd verbinden.
## 2
smt1 = "Pat Auto"
smt2 = "Taxi"
''.join([p + t for p, t in zip(smt1, smt2)])
Es ist ein Gefühl von Grobheit
Teilen Sie den Satz "Jetzt brauche ich nach den schweren Vorlesungen über Quantenmechanik einen Alkoholiker auf." In Wörter auf und erstellen Sie eine Liste mit der Anzahl der (alphabetischen) Zeichen in jedem Wort in der Reihenfolge ihres Auftretens.
## 3
smt = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
[len(w) - w.count(',') - w.count('.') for w in smt.split(' ')]
Ich wollte es gut mit isalpha ()
schreiben, aber ich konnte die Doppelschleife in der Einschlussnotation nicht gut machen, also habe ich dies vorübergehend als Antwort verwendet.
Brechen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch die Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16, Das 19. Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen. Erstellen.
## 4
smt = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
dic = {}
target_index = [1, 5, 6, 7, 8, 9, 15, 16, 19]
for i, w in enumerate(smt.split(' ')):
if i + 1 in target_index:
dic[i + 1] = w[0]
else:
dic[i + 1] = w[:2]
dic
Ist es in Ordnung, ein Ziel oder eine endgültige Entscheidung zu treffen? Ist es in Ordnung, durch wenn zu teilen? Oder verdächtiger Dämon ist zu gefährlich, aber fahren Sie so fort, wie er ist
05 n-gram
Erstellen Sie eine Funktion, die aus einer bestimmten Sequenz (Zeichenfolge, Liste usw.) ein n-Gramm erstellt. Verwenden Sie diese Funktion, um das Wort Bi-Gramm und den Buchstaben Bi-Gramm aus dem Satz "Ich bin ein NLPer" zu erhalten.
## 5
def get_n_gram(n, smt):
words = smt.split(' ')
return [smt[i:i+n] for i in range(len(smt) - n + 1)], [' '.join(words[i:i+n]) for i in range(len(words) -n + 1)]
get_n_gram(3, "I am an NLPer")
Ich dachte, ich könnte es gut mit Scheiben schreiben, deshalb ist es vielleicht besser, die Buchstaben und Wörter zu trennen
Suchen Sie den in "paraparaparadise" und "Absatz" enthaltenen Satz von Zeichen-Bi-Gramm als X bzw. Y und suchen Sie die Summen-, Produkt- und Differenzsätze von X bzw. Y. Finden Sie außerdem heraus, ob das Bi-Gramm in X und Y enthalten ist.
## 6
smt1 = "paraparaparadise"
smt2 = "paragraph"
X = set()
for i in range(len(smt1) - 2 + 1):
X.add(smt1[i:i+2])
Y = set()
for i in range(len(smt2) - 2 + 1):
Y.add(smt2[i:i+2])
print(X | Y)
print(X & Y)
print(X - Y)
print('se' in (X and Y))
print('se' in (X or Y))
Nennen wir es mit Einschlussnotation ... Ich habe erneut bestätigt, dass Set Duplikate löschen kann, und wenn ich etwas Einzigartiges aus der Liste möchte, kann es einmal oder ant gesetzt werden
Implementieren Sie eine Funktion, die die Argumente x, y, z verwendet und die Zeichenfolge "y bei x ist z" zurückgibt. Setzen Sie außerdem x = 12, y = "Temperatur", z = 22,4 und überprüfen Sie das Ausführungsergebnis.
## 7
def get_template(x, y, z):
return "{}von Zeit{}Ist{}".format(x, y, z)
get_template(12, 'Temperatur', 22.4)
Ich könnte dies tun, weil ich es normalerweise benutze, aber ich vergesse oft, wie man die Position mit {0} usw. angibt.
Implementieren Sie die Funktionsverschlüsselung, die jedes Zeichen der angegebenen Zeichenfolge gemäß den folgenden Spezifikationen konvertiert. Durch Kleinbuchstaben ersetzen (219 - Zeichencode) Geben Sie andere Zeichen so aus, wie sie sind Verwenden Sie diese Funktion, um englische Nachrichten zu verschlüsseln / entschlüsseln.
## 8
class Coder:
def __init__():
pass
def encode(smt):
code = ""
for i in range(len(smt)):
if smt[i] .isalpha() and smt[i].islower():
code += chr(219 - ord(smt[i]))
else:
code += smt[i]
return code
def decode(code):
stm = ""
for i in range(len(code)):
if code[i] .isalpha() and code[i].islower():
smt += chr(219 - ord(code[i]))
else:
smt += code[i]
return smt
coder = Coder
smt = "I couldn't believe that"
code = coder.encode(smt)
desmt = coder.encode(code)
print(smt)
print(code)
print(desmt)
Ich hatte bis zu diesem Moment ein schlechtes Auge und eine falsche Chiffre als Kodierer, und es war eine Funktion, keine Klasse. Und ich werde den Zeichencode vergessen, egal wie oft ich ihn nachschlage, also möchte ich ihn das nächste Mal zusammenfassen
09 Typoglycemia
Erstellen Sie ein Programm, das die Reihenfolge der anderen Zeichen zufällig neu anordnet, wobei das erste und das letzte Zeichen jedes Wortes für die Wortfolge durch Leerzeichen getrennt bleiben. Wörter mit einer Länge von 4 oder weniger werden jedoch nicht neu angeordnet. Geben Sie einen geeigneten englischen Satz ein (zum Beispiel: "Ich konnte nicht glauben, dass ich tatsächlich verstehen konnte, was ich las: die phänomenale Kraft des menschlichen Geistes.") Und überprüfen Sie das Ausführungsergebnis.
## 9
import random
def feel_typoglycemia(smt):
typogly = []
for w in smt.split(' '):
if len(w) <= 4:
typogly.append(w)
else:
mid = list(w)[1:-1]
random.shuffle(mid)
typogly.append(w[0] + ''.join(mid) + w[-1])
return ' '.join(typogly)
smt = "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
feel_typoglycemia(smt)
Ich entfernte nur den Anfang und das Ende der Scheibe, mischte sie und befestigte sie. Ich kenne den Ursprung des Funktionsnamens nicht, weil ich mich zu diesem Zeitpunkt nicht erinnere, aber ich habe nicht vor, ihn zu veröffentlichen. Es scheint also, dass ich ihn aufgrund der damaligen Gefühle hinzugefügt habe.
Ich dachte, der Titel sollte den Befehl überprüfen, aber der UNIX-Befehl diente nur zum Überprüfen des Ausführungsergebnisses des Programms.
hightemp.txt ist eine Datei, in der die Aufzeichnung der höchsten Temperatur in Japan im tabulatorgetrennten Format "Präfektur", "Punkt", "℃" und "Tag" gespeichert wird. Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt, und führen Sie hightemp.txt als Eingabedatei aus. Führen Sie außerdem denselben Prozess mit einem UNIX-Befehl aus und überprüfen Sie das Ausführungsergebnis des Programms.
Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.
## 10
with open('./hightemp.txt',) as f:
print(len([r for r in f.read().split('\n') if r is not '']))
## 10
cat hightemp.txt | wc -l
Ich denke, r ist aus der Reihe, aber danach mischt es sich mit l in der Reihe
Ersetzen Sie jedes Tabulatorzeichen durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.
## 11
with open('./hightemp.txt',) as f:
print([r.replace('\t', ' ') for r in f.read().split('\n') if r is not ''])
## 11
cat hightemp.txt | sed "s/\t/\ /g"
## 11
cat hightemp.txt | tr "\t" "\ "
## 11
expand -t 1 hightemp.txt
Ich verstehe, dass sed ein Vim-Typ ist, also lernten tr und expand
Speichern Sie die extrahierte Spalte jeder Zeile als col1.txt und die extrahierte Spalte 2 als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.
## 12
with open('./hightemp.txt',) as f:
table = [r for r in f.read().split('\n') if r is not '']
with open('col1.txt', mode='w') as f:
for t in table:
f.write(t.split('\t')[0] + '\n')
with open('col2.txt', mode='w') as f:
for t in table:
f.write(t.split('\t')[1] + '\n')
## 12
cat hightemp.txt | sed "s/\t/\ /g" | cut -f 1 -d " " > col1.txt
cat hightemp.txt | sed "s/\t/\ /g" | cut -f 2 -d " " > col2.txt
Ich habe es ehrlich gemacht, ohne das Bild der vertikalen Operation zu kennen
Kombinieren Sie col1.txt und col2.txt, die in> 12 erstellt wurden, um eine Textdatei zu erstellen, in der die erste und die zweite Spalte der Originaldatei tabulatorgetrennt angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.
## 13
with open('cols.txt', mode='w') as c:
with open('col1.txt') as f:
with open('col2.txt') as ff:
r1 = f.readline()
r2 = ff.readline()
c.write(r1.replace('\n', '') + '\t' + r2)
while r1:
while r2:
r1 = f.readline()
r2 = ff.readline()
c.write(r1.replace('\n', '') + '\t' + r2)
## 13
paste col1.txt col2.txt > cols.txt
cat cols.txt
Ein Gefühl der Nutzlosigkeit, das von f und ff ausgeht Paste lernte
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.
## 14
n = 5
with open('./hightemp.txt') as f:
lines = f.read()
for l in lines.split('\n')[:n]:
print(l)
head -n 5 hightemp.txt
Es ist eine eindeutig falsche Antwort, da ich den Teil des Befehlszeilenarguments vergessen habe. Ich werde den Teil mit sys.argv
hinzufügen
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.
## 15
n = 5
with open('./hightemp.txt') as f:
lines = f.read()
for l in lines.split('\n')[-n:]:
print(l)
## 15
tail -n 5 hightemp.txt
Ebenso habe ich den Befehlszeilenargumentteil vergessen, daher ist es eine eindeutig falsche Antwort. Ich werde die mit sys.argv
hinzufügen
Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.
## 16
import math
with open('./hightemp.txt') as f:
obj = f.read()
lines = [ l for l in obj.split('\n')]
n = 3
ni = math.ceil(len(lines) / n)
for i in range(0, len(lines), ni):
j = i + ni
print(len(lines[i:j]))
## 16
split -n 5 hightemp.txt
Ebenso habe ich den Befehlszeilenargumentteil vergessen, daher ist es eine eindeutig falsche Antwort. Ich werde die mit sys.argv
hinzufügen
Suchen Sie den Typ der Zeichenfolge in der ersten Spalte (eine Reihe verschiedener Zeichenfolgen). Verwenden Sie zur Bestätigung die Befehle sort und uniq.
## 17
with open('./hightemp.txt') as f:
obj = f.read()
set(row.split('\t')[0] for row in obj.split('\n') if not row =='')
## 17
cat hightemp.txt | sed "s/\t/\ /g" | cut -f 1 -d " " | sort | uniq
Es ist das erste Mal, dass ich mich mit einer solchen Pfeife verbinde, also kannte ich die Freude von One Liner
Ordnen Sie jede Zeile in umgekehrter Reihenfolge der Zahlen in der dritten Spalte an (Hinweis: Ordnen Sie den Inhalt jeder Zeile neu an, ohne ihn zu ändern). Verwenden Sie den Befehl sort zur Bestätigung (dieses Problem muss nicht mit dem Ergebnis der Ausführung des Befehls übereinstimmen).
## 18
with open('./hightemp.txt') as f:
obj = f.read()
rows = [row for row in obj.split('\n') if not row =='']
sorted(rows, key=lambda x: -1 * float(x.split('\t')[2]))
## 18
cat hightemp.txt | sed "s/\t/\ /g" | sort -r -k 3 -t " "
float brauchte eine Besetzung
Ermitteln Sie die Häufigkeit des Auftretens der ersten Spalte jeder Zeile und zeigen Sie sie in absteigender Reihenfolge an. Verwenden Sie zur Bestätigung die Befehle cut, uniq und sort.
## 19
with open('./hightemp.txt') as f:
obj = f.read()
rows =[row.split('\t')[0] for row in obj.split('\n') if not row =='']
c_dic= {}
for k in set(rows):
c_dic[k] = rows.count(k)
sorted(c_dic.items(), key=lambda x: -x[1])
## 19
cat hightemp.txt | sed "s/\t/\ /g" | cut -f 1 -d " " | sort | uniq -c | sort -rn -k 3 -t " "
Es ist ein Reflexionspunkt, r oder row zu sein
Es gibt eine Datei jawiki-country.json.gz, die Wikipedia-Artikel im folgenden Format exportiert. Informationen zu einem Artikel pro Zeile werden im JSON-Format gespeichert In jeder Zeile wird der Artikelname im Schlüssel "title" und der Artikelkörper im Wörterbuchobjekt mit dem Schlüssel "text" gespeichert, und dieses Objekt wird im JSON-Format ausgeschrieben. Die gesamte Datei wird komprimiert Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt.
Ich habe das Gefühl, ich bin durchgeglitten, ohne zu viele reguläre Ausdrücke zu verwenden
wget http://www.cl.ecei.tohoku.ac.jp/nlp100/data/jawiki-country.json.gz
Da es auf dem Juypter-Notebook lief, führen Sie es mit einem! Am Anfang aus.
Lesen Sie die JSON-Datei des Wikipedia-Artikels und zeigen Sie den Artikeltext zu "UK" an. Führen Sie in den Problemen 21-29 den hier extrahierten Artikeltext aus.
## 20
import json, gzip
with gzip.open('jawiki-country.json.gz', 'rt') as f:
obj = json.loads(f.readline())
while(obj):
try:
obj = json.loads(f.readline())
if obj['title'] == "England":
break
except:
obj = f.readline()
Ich kannte gzip nicht ganz und lernte es
Extrahieren Sie die Zeile, in der der Kategoriename im Artikel angegeben ist.
## 21
for l in obj['text'].split('\n'):
if 'Category' in l:
print(l)
Strengere Bedingungen können besser sein
Extrahieren Sie die Namen der Artikelkategorien (nach Namen, nicht zeilenweise).
## 22
import re
head_pattern = r'\[\[Category:'
tail_pattern = r'\|?\*?\]\]'
for l in obj['text'].split('\n'):
if 'Category' in l:
l = re.sub(head_pattern, '', l)
print(re.sub(tail_pattern, '', l))
Ich habe es auf die Gorigori geschrieben
Zeigen Sie die im Artikel enthaltenen Abschnittsnamen und deren Ebenen an (z. B. 1, wenn "== Abschnittsname ==").
## 23
pattern = '=='
for l in obj['text'].split('\n'):
if pattern in l:
pat_by_sec = ''.join([r'=' for i in range(int(l.count('=') / 2 ))])
sec = len(pat_by_sec) - 1
tab = ''.join(['\t' for i in range(sec - 1)])
print('{}{}. {}'.format(tab, sec, l.replace('=', '')))
Ein kleiner Umweg, weil ich beim Anzeigen auf der Registerkarte einrücken wollte
Extrahieren Sie alle Mediendateien, auf die aus dem Artikel verwiesen wird.
## 24
for l in obj['text'].split('\n'):
if 'Datei' in l:
print(l.split(':')[1].split('|')[0])
Eine strengere if-Aussage könnte auch hier besser sein
Extrahieren Sie die Feldnamen und Werte der im Artikel enthaltenen Vorlage "Basisinformationen" und speichern Sie sie als Wörterbuchobjekt.
## 25
import re
pattern = r' = '
basic_info = {}
for l in obj['text'].split('\n'):
if pattern in l:
basic_info[l.split(' = ')[0].replace('|', '')] = l.split(' = ')[1]
basic_info
Es scheint nicht gut zu sein, Methoden bei der Textverarbeitung häufig zu verbinden
Entfernen Sie zum Zeitpunkt der Verarbeitung> 25 das MediaWiki-Hervorhebungs-Markup (alle schwachen Hervorhebungen, Hervorhebungen und starken Hervorhebungen) aus dem Vorlagenwert und konvertieren Sie es in Text (Referenz: Markup-Kurzreferenztabelle).
## 26
import re
pattern = r' = '
basic_info = {}
for l in obj['text'].split('\n'):
if pattern in l:
basic_info[l.split(' = ')[0].replace('|', '')] = l.split(' = ')[1].replace('\'', '')
basic_info
Ich begann zu denken, dass ich mit der harten Codierung fortfahren möchte, ohne Vielseitigkeit in der Textverarbeitung zu fordern
Entfernen Sie zusätzlich zur Verarbeitung von> 26 das interne Link-Markup für MediaWiki aus dem Vorlagenwert und konvertieren Sie es in Text (Referenz: Markup-Kurzreferenztabelle).
## 27
import re
pattern = r' = '
med_link = r'\[|\]'
basic_info = {}
for l in obj['text'].split('\n'):
if pattern in l:
val = l.split(' = ')[1].replace('\'', '')
val = re.sub(med_link, '', val)
basic_info[l.split(' = ')[0].replace('|', '')] = val
basic_info
Während ich mir die Ausgabe ansah, nahm ich Ad-hoc-Korrekturen vor
Entfernen Sie zusätzlich zur Verarbeitung> 27 MediaWiki-Markups so weit wie möglich aus den Vorlagenwerten und formatieren Sie grundlegende Länderinformationen.
## 28
import re
pattern = r' = '
med_link = r'\[|\]'
strong = r'\{|\}'
tag = r'\<+.*\>'
basic_info = {}
for l in obj['text'].split('\n'):
if pattern in l:
val = l.split(' = ')[1].replace('\'', '')
val = re.sub(med_link, '', val)
val = re.sub(strong, '', val)
val = re.sub(tag, '', val)
basic_info[l.split(' = ')[0].replace('|', '')] = val
basic_info
Aufgeben war schnell, weil es "so viel wie möglich" war.
Verwenden Sie den Inhalt der Vorlage, um die URL des Flaggenbilds abzurufen. (Hinweis: Rufen Sie imageinfo in der MediaWiki-API auf, um Dateiverweise in URLs zu konvertieren.)
## 29
import requests
S = requests.Session()
URL = "https://en.wikipedia.org/w/api.php"
PARAMS = {
"action": "query",
"format": "json",
"prop": "imageinfo",
"iiprop": "url",
"titles": "File:" + basic_info['Flaggenbild']
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA["query"]["pages"]
for k, v in PAGES.items():
for kk, vv in v.items():
if kk == 'imageinfo':
print(vv[0]['url'])
Drücken Sie die API mit Bezug auf den Referenzcode
Verwenden Sie MeCab, um den Text (neko.txt) von Natsume Sosekis Roman "Ich bin eine Katze" morphologisch zu analysieren und das Ergebnis in einer Datei namens neko.txt.mecab zu speichern. Verwenden Sie diese Datei, um ein Programm zu implementieren, das die folgenden Fragen beantwortet. Verwenden Sie für die Probleme 37, 38, 39 matplotlib oder Gnuplot.
wget http://www.cl.ecei.tohoku.ac.jp/nlp100/data/neko.txt
import MeCab
t = MeCab.Tagger()
with open('./neko.txt') as f:
text = f.read()
with open('./neko.txt.mecab', mode='w') as f:
f.write(t.parse(text))
Bisher wurde die Analyse in einer Reihe von Prozessen durchgeführt, ohne die Analyseergebnisse zu speichern. Lernen Sie, weil diese Operation besser zu sein scheint
Implementieren Sie ein Programm, das die Ergebnisse der morphologischen Analyse liest (neko.txt.mecab). Jedes morphologische Element wird jedoch in einem Zuordnungstyp mit dem Schlüssel der Oberflächenform (Oberfläche), der Grundform (Basis), einem Teil des Wortes (pos) und einem Teil der Wortunterklassifizierung 1 (pos1) gespeichert, und ein Satz wird als Liste morphologischer Elemente (Zuordnungstyp) ausgedrückt. Machen wir das. Verwenden Sie für die restlichen Probleme in Kapitel 4 das hier erstellte Programm.
## 30
doc = []
with open('./neko.txt.mecab') as f:
token_list = []
token = f.readline()
while('EOS' not in token):
dic = {}
dic['surface'] = token.split('\t')[0]
dic['base'] = token.split('\t')[1].split(',')[-3]
dic['pos'] = token.split('\t')[1].split(',')[0]
dic['pos1'] = token.split('\t')[1].split(',')[1]
token = f.readline()
if dic['surface'] == '。':
doc.append(token_list)
token_list = []
continue
token_list.
Es ist möglicherweise besser, den Rückgabewert von "token.split (" \ t ")" einmal zu speichern
Extrahieren Sie alle Oberflächenformen des Verbs.
## 31
for s in doc:
for t in s:
if t['pos'] == 'Verb':
print(t['surface'])
Jetzt würde ich definitiv [t ['Oberfläche'] für t in s schreiben, wenn t ['pos'] == 'Verb']
Extrahieren Sie alle Originalformen des Verbs.
## 32
for s in doc:
for t in s:
if t['pos'] == 'Verb':
print(t['base'])
In ähnlicher Weise ist [t ['base'] für t in s, wenn t ['pos'] == 'verb']
Extrahieren Sie die gesamte Nomenklatur der Verbindung.
## 33
for s in doc:
for t in s:
if t['pos1'] == 'Verbindung ändern':
print(t['base'])
In ähnlicher Weise ist [t ['base'] für t in s, wenn t ['pos1'] == 'Sahen noun']
Extrahieren Sie die Nomenklatur, in der zwei Nomenklaturen durch "Nein" verbunden sind.
## 34
for s in doc:
for i, t in enumerate(s):
if t['surface'] == 'von' and i + 1 != len(s):
if s[i -1]['pos'] == 'Substantiv' and s[i +1]['pos'] == 'Substantiv':
print(s[i -1]['surface'] + t['base'] + s[i +1]['surface'])
Achten Sie darauf, dass der Index nicht herausspringt, vorausgesetzt, es gibt keinen Satz, der mit dem morphologischen Element "no" beginnt.
Angenommen, es gibt keinen Satz, der mit dem morphologischen Element "nein" beginnt.
Wahrscheinlich nicht gut
Extrahieren Sie die Verkettung der Nomenklatur (Substantive, die nacheinander erscheinen) mit der längsten Übereinstimmung.
## 35
## 35
max_list = []
tmp = ""
max_len = len(tmp)
for s in doc:
for i, t in enumerate(s):
if t['pos'] == 'Substantiv' :
tmp += t['surface']
else:
if len(tmp) == max_len:
max_list.append(tmp)
elif len(tmp) > max_len:
max_list = []
max_list.append(tmp)
max_len = len(tmp)
tmp = ''
print(len(max_list[0]))
print(max_list)
Es waren 30 Zeichen in Englisch
Finden Sie die Wörter, die im Satz erscheinen, und ihre Häufigkeit des Auftretens, und ordnen Sie sie in absteigender Reihenfolge der Häufigkeit des Auftretens an.
## 36
base_list = []
count_dic = {}
for s in doc:
for t in s:
base_list.append(t['base'])
for word in set(base_list):
count_dic[word] = base_list.count(word)
sorted(count_dic.items(), key=lambda x: -x[1])
base_list = [t ['base'] für s in doc für t in s]
Zeigen Sie die 10 am häufigsten vorkommenden Wörter und ihre Häufigkeit des Auftretens in einem Diagramm an (z. B. einem Balkendiagramm).
## 37
import matplotlib.pyplot as plt
import japanize_matplotlib
%matplotlib inline
n = 10
labels = [i[0] for i in sorted(count_dic.items(), key=lambda x: -x[1])[:n]]
score = [i[1] for i in sorted(count_dic.items(), key=lambda x: -x[1])[:n]]
plt.bar(labels, score)
plt.show()
Wenn ich süchtig danach war, Schriftarten für die Anzeige von Japanisch in matplotlib festzulegen, stieß ich auf eine gute Schrift namens japanize-matplotlib.
Zeichnen Sie ein Histogramm der Häufigkeit des Auftretens von Wörtern (die horizontale Achse repräsentiert die Häufigkeit des Auftretens und die vertikale Achse repräsentiert die Anzahl der Arten von Wörtern, die die Häufigkeit des Auftretens als Balkendiagramm verwenden).
## 38
import matplotlib.pyplot as plt
import japanize_matplotlib
%matplotlib inline
all_score = [i[1] for i in sorted(count_dic.items(), key=lambda x: -x[1])]
plt.hist(all_score, range(10, 100));
In diesem Bereich gewöhne ich mich daran, die Liste der Wörterbücher zu sortieren.
Zeichnen Sie beide logarithmischen Diagramme mit der Wortfrequenzrangfolge auf der horizontalen Achse und der Wortfrequenz auf der vertikalen Achse.
## 39
import math
log_idx = [math.log(i + 1) for i in range(len(count_dic.values()))]
log_all_score = [math.log(i[1]) for i in sorted(count_dic.items(), key=lambda x: -x[1])]
plt.scatter(log_idx, log_all_score, range(10, 100));
Ich wusste es nicht, also war es erstaunlich, die Ausgabe zu sehen Ich habe Mathe anstelle von Numpy verwendet
Ist es in Ordnung, das Problem so zu posten? Wenn es nicht funktioniert, werde ich es sofort löschen Wenn Sie eine Community wie ein Seminar haben, sollten Sie jede Woche 10 Fragen entscheiden und sich gegenseitig als Ganzes überprüfen. Ich möchte bis zum letzten im Adventskalender ~ zusammenfassen