> "Natto (non génétiquement modifié)"|Get-ReadingWithSudachi|fl
Line :Natto (non génétiquement modifié)
Reading :Natto (Idenshikumakaedenai)
Tokenize :Natto(Natto)/(/gène(Idenshi)/Recombinant(Kumikae)/alors/Absent/)
Markup : <p><ruby>Natto<rt>Natto</rt></ruby>(<ruby>gène<rt>Idenshi</rt></ruby>
<ruby>Recombinant<rt>Kumikae</rt></ruby>Ne pas)</p>
environnement:
> $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
Appelez l'analyse morphologique dans SudachiPy que j'ai écrite plus tôt ([PowerShell] analyse morphologique dans SudachiPy).
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 "symbole|Vide" -or $tokenSurface -match "^([UNE-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
}
Parfois, je ne parviens pas à analyser des termes techniques comme celui-ci.
Vous pouvez en vérifier visuellement un ou deux, mais comme ce serait un problème de traiter des centaines de lignes, j'ai ajouté une propriété appelée Markup
pour cracher le balisage html.
(cat hogehoge.txt |Get-ReadingWithSudachi).markup|Out-File hogehoge.html
Je crois que si vous le convertissez en html comme décrit ci-dessus et que vous le vérifiez avec un navigateur, les oublis seront réduits dans une certaine mesure.
Recommended Posts