【基於WPF+OneNote+Oracle的中文圖片識別系統階段總結】之篇四:關於OneNote入庫處理以及審核


篇一:WPF常用知識以及本項目設計總結:http://www.cnblogs.com/baiboy/p/wpf.html

篇二:基於OneNote難點突破和批量識別:http://www.cnblogs.com/baiboy/p/wpf1.html

篇三:批量處理后的txt文件入庫處理:http://www.cnblogs.com/baiboy/p/wpf2.html

篇四:關於OneNote入庫處理以及審核:http://www.cnblogs.com/baiboy/p/wpf3.html


【小記】:大膽嘗試才能突破,某個中醫葯大學有一批圖片需要處理(OCR),然后進行數據挖掘。之前沒有接觸過OCR這個東西,但是還是應允了。在網上搜索一番,關於中文圖片識別,最終敲定為基於微軟的OneNote,其識別率相對較高。網上這個技術點的資料真心不多,后來於博客園找到一篇博文,但是那個程序還是bug百出,而且只是單處理。后來經過一番摸索逐個突破,批處理完成。然后進行界面設計,這些零碎工作完成后,便是入庫處理。由於OneNote生成的xml文件封裝好的,即不可視的。便將其代碼處理生成txt文件,再進行Oracle入庫處理。入庫前需要文件內容審核,並且在WPF開發中數據綁定和分頁中做了獨特處理。現在經過半個月的工作,本項目做個階段總結。一則知識總結便於二次開發,盡量保持程序流暢性,核心知識做以梳理;另外,相關WPFOneNote常用技術共享,便於部分園友所需。本人技術有限,歡迎交流。項目還未結束,暫作階段文章發布,隨后相繼發布。


篇四:關於OneNote入庫處理以及審核

【開篇概述】:文本作為系列文章的最后一篇,主要對頁面進行設計布局和審核頁面的完善,其中主頁面用戶可以查詢審核通過的信息,瀏覽詳細信息。也可以作為導航到orc頁面,對批量圖片進行文字處理,處理后的文件,可以通過入庫頁面對文件信息提取。達到半自動填寫表格的狀態,由於文件信息不一定符合主觀要求或者格式不一致,所以設置了審核頁面,也是信息修改頁面,信息無誤后,選擇下面審核通過復選框即可成功入庫。后面就是交付做數據挖掘處理了。效果如圖所示

主頁面:

 

完整代碼:

namespace OnenoteOCRDemo
{
    /// <summary>
    /// Index.xaml 的交互邏輯
    /// </summary>
    public partial class Index : Window
    {
        public Index()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }
        page page1 = new page();
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            this.c1.Children.Add(page1);
            this.Loaded += delegate
            {
                InitData();
            };
            dataGrid1.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid1_LoadingRow);
        }
        void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = e.Row.GetIndex() + 1;    //設置行表頭的內容值   
        }
        //查詢
        private void InitData()
        {
            string sql = "select * from T_TCM_THESIS where auditflag=1  order by ID desc";
            DataSet ds = MYHelper.SQLHelper.GetOrlData(sql);
            if (ds.Tables[0].Rows.Count > 0)
            {
                page1.ShowPages(this.dataGrid1, ds, 10);
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("Erroy");
            }
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            InitData();
        }

        private void hlorc_Click(object sender, RoutedEventArgs e)
        {
            Main m = new Main();
            m.Show();
        }

        private void hltext_Click(object sender, RoutedEventArgs e)
        {
            TextData td = new TextData();
            td.Show();
        }
        //刷新
        private void hlnew_Click(object sender, RoutedEventArgs e)
        {
            InitData();
        }

        private void hyper2_Click(object sender, RoutedEventArgs e)
        {
            this.Hide();
            DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem;
            int ID = Convert.ToInt32((mySelectedElement.Row[0]));  //獲取該行的FID  
            falg f = new falg(ID,0);
            f.Show();
        }

    
    }
}
View Code

審核頁面:

完整代碼:

namespace OnenoteOCRDemo
{
    /// <summary>
    /// falg.xaml 的交互邏輯
    /// </summary>
    public partial class falg : Window
    {
        int i;
        public falg(int id,int n)
        {
            InitializeComponent();
            txt.Text = id.ToString();
            THESIS(id);
            i = n;
            if (i == 0)
            {
                btnupdate.Visibility = System.Windows.Visibility.Hidden;
                cbflag.Visibility = System.Windows.Visibility.Hidden;
                txtflag.Text="審核通過";
            }
        }
        private void THESIS(int id)
        {
            string sql = "select * from T_TCM_THESIS where id="+id;

            DataTable dt = MYHelper.SQLHelper.GetTabOrlData(sql);
            if (dt.Rows.Count>0)
            {
                txtdocname.Text = dt.Rows[0]["docname"].ToString();
                txtauthor.Text = dt.Rows[0]["author"].ToString();
                txtcompany.Text = dt.Rows[0]["authorcompany"].ToString();
                txtcontent.Text = dt.Rows[0]["content"].ToString();
                txtdigest.Text = dt.Rows[0]["digest"].ToString();
                txtdisease.Text = dt.Rows[0]["disease"].ToString();
                txtdoctype.Text = dt.Rows[0]["doctype"].ToString();
                txtenglishtitle.Text = dt.Rows[0]["englishtitle"].ToString();
                txtkeyword.Text = dt.Rows[0]["keyword"].ToString();
                txtmemo.Text = dt.Rows[0]["memo"].ToString();
                txtpath.Text = dt.Rows[0]["path"].ToString();
                txtsource.Text = dt.Rows[0]["source"].ToString();
                txtsourcetype.Text = dt.Rows[0]["sourcetype"].ToString();
                txtsummary.Text = dt.Rows[0]["summary"].ToString();
                txttitle.Text = dt.Rows[0]["title"].ToString();
                txtyears.Text = dt.Rows[0]["years"].ToString();
                int flag =Convert.ToInt32(dt.Rows[0]["auditflag"].ToString());
                if (flag == 1)
                {
                    cbflag.IsChecked = true;
                }
                else
                {
                    cbflag.IsChecked = false;
                }
            }
        }
        public void TextIsNull()
        {
            txtdocname.Text = "";
            txtyears.Text = "";
            txtdoctype.Text = "";
            txtsummary.Text = "";
            txtauthor.Text = "";
            txtsource.Text = "";
            txtsourcetype.Text = "";
            txtmemo.Text = "";
            txttitle.Text = "";
            txtenglishtitle.Text = "";
            txtcompany.Text = "";
            txtkeyword.Text = "";
            txtcontent.Text = "";
            txtdigest.Text = "";
            txtpath.Text = "";
            txtdisease.Text = "";
            cbflag.IsChecked = false;
        }
        //審核信息(更新信息)
        private void btnupdate_Click(object sender, RoutedEventArgs e)
        {
            int id=Convert.ToInt32( txt.Text);
            string docname = txtdocname.Text.ToString();
            string years = txtyears.Text.ToString();
            string doctype = txtdoctype.Text.ToString();
            string summary = txtsummary.Text.ToString();
            string author = txtauthor.Text.ToString();
            string source = txtsource.Text.ToString();
            string sourcetype = txtsourcetype.Text.ToString();
            string memo = txtmemo.Text.ToString();
            string title = txttitle.Text.ToString();
            string englishtitle = txtenglishtitle.Text.ToString();
            string authorcompany = txtcompany.Text.ToString();
            string keyword = txtkeyword.Text.ToString();
            string content = txtcontent.Text.ToString().Trim();
            string digest = txtdigest.Text.ToString();
            string path = txtpath.Text.ToString();
            string disease = txtdisease.Text.ToString();
            int auditflag;
            if (cbflag.IsChecked == true)
            {
                auditflag = 1;
            }
            else
            {
                auditflag =0;
            }
            try
            {
                string sql = "update T_TCM_THESIS set docname='" + docname + "',years='" + years + "',doctype='" + doctype + "',summary='" + summary + "',";
                sql += "author='" + author + "',source='" + source + "',sourcetype='" + sourcetype + "',memo='" + memo + "',title='" + title + "',";
                sql += "englishtitle='" + englishtitle + "',authorcompany='" + authorcompany + "',keyword='" + keyword + "',content='" + content + "',digest='" + digest + "',";
                sql += "path='" + path + "',disease='" + disease + "',auditflag=" + auditflag + " where ID= "+id;
                int i = SQLHelper.OrlExecuteQuery(sql);
                if (i > 0)
                {
                    System.Windows.Forms.MessageBox.Show("審核通過", "審核信息");
                    TextIsNull();
                    this.Close();
                    TextData td = new TextData();
                    td.Show();
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("審核失敗", "審核信息");
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
        }

        private void btnback_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
            if (i == 1)
            {
                TextData td = new TextData();
                td.Show();
            }
            else {
                Index index = new Index();
                index.Show();
            }
        }
    }
}
View Code

 


【功能以及操作描述】

  1. 打開主頁面可以看到,每條信息前序號的生成,通過后台對事件重寫完成,代碼如下。
            void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
                this.c1.Children.Add(page1);
                this.Loaded += delegate
                {
                    InitData();
                };
                dataGrid1.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid1_LoadingRow);
            }
            void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
            {
                e.Row.Header = e.Row.GetIndex() + 1;    //設置行表頭的內容值   
            }
    View Code

     

      
  2. 頁面自動顯示為分頁顯示,通過用戶控件進行分頁,然后對數據控件進行綁定,詳細操作見系列二文章。本功能代碼如下:
     //查詢
            private void InitData()
            {
                string sql = "select * from T_TCM_THESIS where auditflag=1  order by ID desc";
                DataSet ds = MYHelper.SQLHelper.GetOrlData(sql);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    page1.ShowPages(this.dataGrid1, ds, 10);
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Erroy");
                }
            }
    View Code

     

  3. 點擊詳細信息按鈕,跳轉的詳細信息頁面。如何獲取DataGrid主鍵是關鍵,具體實現為:
                this.Hide();
                DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem;
                int ID = Convert.ToInt32((mySelectedElement.Row[0]));  //獲取該行的FID  
                falg f = new falg(ID,0);
                f.Show();

     

  4. 在目標頁面,通過頁面接受頁面傳值,顯示到詳細信息。
     private void THESIS(int id)
            {
                string sql = "select * from T_TCM_THESIS where id="+id;
    
                DataTable dt = MYHelper.SQLHelper.GetTabOrlData(sql);
                if (dt.Rows.Count>0)
                {
                    txtdocname.Text = dt.Rows[0]["docname"].ToString();
                    txtauthor.Text = dt.Rows[0]["author"].ToString();
                    txtcompany.Text = dt.Rows[0]["authorcompany"].ToString();
                    txtcontent.Text = dt.Rows[0]["content"].ToString();
                    txtdigest.Text = dt.Rows[0]["digest"].ToString();
                    txtdisease.Text = dt.Rows[0]["disease"].ToString();
                    txtdoctype.Text = dt.Rows[0]["doctype"].ToString();
                    txtenglishtitle.Text = dt.Rows[0]["englishtitle"].ToString();
                    txtkeyword.Text = dt.Rows[0]["keyword"].ToString();
                    txtmemo.Text = dt.Rows[0]["memo"].ToString();
                    txtpath.Text = dt.Rows[0]["path"].ToString();
                    txtsource.Text = dt.Rows[0]["source"].ToString();
                    txtsourcetype.Text = dt.Rows[0]["sourcetype"].ToString();
                    txtsummary.Text = dt.Rows[0]["summary"].ToString();
                    txttitle.Text = dt.Rows[0]["title"].ToString();
                    txtyears.Text = dt.Rows[0]["years"].ToString();
                    int flag =Convert.ToInt32(dt.Rows[0]["auditflag"].ToString());
                    if (flag == 1)
                    {
                        cbflag.IsChecked = true;
                    }
                    else
                    {
                        cbflag.IsChecked = false;
                    }
                }
            }
    View Code

     

  5. 審核頁面的具體操作也是類似, 不同之處在於對傳值頁面進行邏輯判斷,如果是審核則允許頁面信息的更新,如果查看詳細信息,則更新按鈕隱藏。

 


 【篇末】:截止到此,本程序完全結束,本章涉及頁面傳值和數據綁定等基本信息,這方面大體與winfrom操作一致。本程序采用講涉及的知識點數十個,均一一列出整理。數據庫sql文件在項目的db文件夾中,附上完整源碼如下:

 

注:源碼地址鏈接總是不正確,后來打開管理--〉文件,查看源碼,找到本文件的鏈接地址粘貼即可。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM