> "Natto (nicht gentechnisch verändert)"|Get-ReadingWithSudachi|fl
Line :Natto (nicht gentechnisch verändert)
Reading :Natto (Idenshikumakaedenai)
Tokenize :Natto(Natto)/(/Gen(Idenshi)/Rekombinant(Kumikae)/damit/Abwesend/)
Markup : <p><ruby>Natto<rt>Natto</rt></ruby>(<ruby>Gen<rt>Idenshi</rt></ruby>
<ruby>Rekombinant<rt>Kumikae</rt></ruby>Nicht)</p>
Umgebung:
> $PSVersionTable
Name Value
---- -----
PSVersion 7.0.3
PSEdition Core
GitCommitId 7.0.3
OS Microsoft Windows 10.0.18362
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
Nennen Sie die morphologische Analyse in SudachiPy, die ich zuvor geschrieben habe (PowerShell-morphologische Analyse in SudachiPy) (https://qiita.com/AWtnb/items/eb778aba1cc2e335e581).
function Get-ReadingWithSudachi {
param (
[switch]$readingOnly,
[switch]$ignoreParen
)
$ret = New-Object System.Collections.ArrayList
$tokenizedResults = $input | Invoke-SudachiTokenizer -ignoreParen:$ignoreParen
foreach ($result in $tokenizedResults) {
$reading = New-Object System.Text.StringBuilder
$tokenize = New-Object System.Collections.ArrayList
$markup = New-Object System.Collections.ArrayList
foreach ($token in $result.parsed) {
$tokenSurface = $token.surface
if ($token.pos -match "Symbol|Leer" -or $tokenSurface -match "^([EIN-Vu]|[a-zA-Za-zA-Z]|[0-90-9]|[\W\s])+$") {
$tokenReading = $tokenSurface
$tokenInfo = $tokenSurface
$tokenMarkup = $tokenSurface
}
elseif (-not $token.reading) {
$tokenReading = $tokenSurface
$tokenInfo = "$($tokenSurface)(?)"
$tokenMarkup = $tokenSurface
}
else {
$tokenReading = $token.reading
$tokenInfo = ($tokenSurface -match "^[Ah-Hmm]+$")?
$tokenSurface :
"$($tokenSurface)($tokenReading)"
$tokenMarkup = ($tokenSurface -match "^[Ah-Hmm]+$")?
$tokenSurface :
"<ruby>{0}<rt>{1}</rt></ruby>" -f $tokenSurface, $tokenReading
}
$reading.Append($tokenReading) > $null
$tokenize.Add($tokenInfo) > $null
$markup.Add($tokenMarkup) > $null
}
$ret.Add([PSCustomObject]@{
Line = $result.line
Reading = $reading.ToString()
Tokenize = $tokenize -join "/"
Markup = "<p>{0}</p>" -f ($markup -join "")
}) > $null
}
return ($readingOnly)? $ret.reading : $ret
}
Manchmal kann ich solche Fachbegriffe nicht analysieren.
Sie können ein oder zwei visuell überprüfen, aber da es ein Problem wäre, Hunderte von Zeilen zu verarbeiten, habe ich eine Eigenschaft namens "Markup" hinzugefügt, um HTML-Markup auszuspucken.
(cat hogehoge.txt |Get-ReadingWithSudachi).markup|Out-File hogehoge.html
Ich glaube, wenn Sie es wie oben beschrieben in HTML konvertieren und mit einem Browser überprüfen, werden Versehen bis zu einem gewissen Grad reduziert.
Recommended Posts