> "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