2

私はストップワードの文字列配列と入力テキストの文字列配列を持っています

string[] stopWords = File.ReadAllLines(@"C:\stopWords.txt");

con.Open();
SqlCommand query = con.CreateCommand();
query.CommandText = "select p_abstract from aminer_paper where pid between 1 and 500 and DATALENGTH(p_abstract) != 0";

SqlDataReader reader = query.ExecuteReader();

var summary = new List<string>();
while(reader.Read())
{
    summary.Add(reader["p_abstract"].ToString());
}

reader.Close();

string[] input_Texts = summary.ToArray();

ここで、これらの stopWords 配列を使用して、input_Texts 配列から削除する必要があります。私は次の手法を使用しましたが、両方の配列インデックスにアクセスしている間、奇妙に機能しませんでした。たとえば、input_Texts 配列のインデックス 0 にある最初のテキストを取得します。

input_Texts[0]

そして、stopWords 配列のすべての単語文字列に一致します。

// have to match all the indexes of stopWords[] with input_Texts[0]
stopWords[]   

次に、配列stopWordsのインデックス 0 テキストからすべてを削除した後input_Texts、input_Texts 配列内のすべてのテキストに対してそれを繰り返す必要があります。

変更を加えた提案やコード サンプルは、謝辞とともに高く評価されます。

ありがとう。

4

4 に答える 4

0
using System;
using System.IO;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;

namespace StopWords_Removal
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {

                string[] stopWords = File.ReadAllLines(@"C:\stopWords.txt");

                SqlConnection con = new SqlConnection("Data Source=ABC;Initial Catalog=xyz;Integrated Security=True");

                con.Open();
                SqlCommand query = con.CreateCommand();
                query.CommandText = "select text from table where id between 1 and 500 and DATALENGTH(text) != 0";

                SqlDataReader reader = query.ExecuteReader();

                var summary = new List<string>();
                while(reader.Read())
                {
                    summary.Add(reader["p_abstract"].ToString());
                }

                reader.Close();
                string[] input_Texts = summary.ToArray();

                for (int i = 0; i < input_Texts.Length; i++)
                {
                    for (int j = 0; j < input_Texts.Length; j++)
                    {
                        input_Texts[j] = string.Join(" ", input_Texts[j].Split(' ').Except(input_Texts[j].Split(' ').Intersect(stopWords)));
                    }
                }

                for (int d = 0; d < input_Texts.Length; d++)
                {
                    Console.WriteLine(input_Texts[d]); 
                    Console.ReadLine();
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.Message);
            }
            finally
            {
                Console.WriteLine("Executing finally block.");
            } 
        }
    }
}
于 2015-06-19T09:24:19.553 に答える
0

次のようにすることもできます。

for(int i=0;i<input_Texts.Length;i++)
  {
    input_Texts[i]=string.Join(" ", input_Texts[i].Split(' ').Except(input_Texts[i].Split(' ').Intersect(stopWords)));
  }

これにより、input_Texts 内の各テキストが処理され、そこからすべてのストップ ワードが削除されます。

于 2015-06-19T05:34:43.753 に答える