0

タイトルページをスキャンしてOCRを使用することで、本の出版社を取得するプログラムを構築しています…出版社は常にタイトルページの下部にあるため、スペースで区切られた行を検出することは解決策だと思いますがそれをテストする方法がわかりません。これが私のコードです:

Dim builder As New StringBuilder()
Dim reader As New StringReader(txtOCR.Text)
Dim iCounter As Integer = 0
While True
    Dim line As String = reader.ReadLine()
    If line Is Nothing Then Exit While

    'i want to put the condition here

End While
txtPublisher.Text = builder.ToString()
4

3 に答える 3

2

空の行を意味しますか?次に、これを行うことができます:

Dim bEmpty As Boolean

そして、ループの内側:

If line.Trim().Length = 0 Then
    bEmpty = True
Else
    If bEmpty Then
        '...
    End If

    bEmpty = False
End If
于 2013-02-26T09:48:51.970 に答える
1

次のことを行ってみませんか。下から、最初の空でない行が見つかるまで上に移動します(OCRがどのように機能するかはわかりません…おそらく、一番下の行は常に空ではありません。この場合、これは冗長です)。次のステップでは、最初の空の行まで上に移動します。真ん中のテキストは出版社です。

そのために必要はありませんStringReader

Dim lines As String() = txtOCR.Text.Split(Environment.NewLine)
Dim bottom As Integer = lines.Length - 1

' Find bottom-most non-empty line.
Do While String.IsNullOrWhitespace(lines(bottom))
    bottom -= 1
Loop

' Find empty line above that
Dim top As Integer = bottom - 1

Do Until String.IsNullOrWhitespace(lines(top))
    top -= 1
Loop

Dim publisherSubset As New String(bottom - top)()
Array.Copy(lines, top + 1, publisherSubset, 0, bottom - top)
Dim publisher As String = String.Join(Environment.NewLine, publisherSubset)

しかし、正直なところ、これは特に良いアプローチではないと思います。柔軟性がなく、予期しないフォーマットにうまく対応できません。代わりに、正規表現を使用して、発行元の文字列(およびそのコンテキスト)がどのように見えるかを記述します。そして、それでも十分ではないかもしれません。ページ全体を説明することを考えて、どのビットが発行者であるかを推定する必要があります。

于 2013-02-26T10:05:14.983 に答える
1

パブリッシャーが常に最後の行にあり、常に空の行の後に来ると仮定します。それならおそらく次の?

    Dim Lines as New List(Of String)
    Dim currentLine as String = ""
    Dim previousLine as String = ""

    Using reader As StreamReader = New StreamReader(txtOCR.Txt)
    currentLine = reader.ReadLine
     If String.IsNullOrWhiteSpace(previousLine) then lines.Add(currentLine)
     previousLine = currentLine
    End Using

    txtPublisher.Text = lines.LastOrDefault()

前の行が空白/空の場合に無視するには:

Dim Lines as New List(Of String) 
Using reader As StreamReader = New StreamReader(txtOCR.Txt) 
lines.Add(reader.ReadLine) 
End Using 

txtPublisher.Text = lines.LastOrDefault()
于 2013-02-26T10:21:18.607 に答える