使用数组 c# 删除停用词
stop words removal using arrays c#
我有一个停用词字符串数组和输入文本字符串数组,即
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();
现在,我必须使用这些停用词数组从 input_Texts 数组中删除。
我使用了以下技术但没有工作,在访问两个数组索引时很奇怪。例如,在 input_Texts 数组的索引 0 处获取第一个文本,即
input_Texts[0]
然后匹配 stopWords 数组中的所有单词字符串即
// have to match all the indexes of stopWords[] with input_Texts[0]
stopWords[]
然后在从 input_Texts
数组的索引 0 文本中删除所有 stopWords
之后,必须对 input_Texts 数组中的所有文本重复它。
任何建议和经过修改的代码示例将不胜感激并予以确认。
谢谢。
您可以使用 Linq 来执行此操作
//string[] input_Text = new string[] { "Ravi Kumar", "Ravi Kumar", "Ravi Kumar" };
//string[] stopWords = new string[] { "Ravi" };
for(int i=0;i<input_Text.Count();i++)
{
for (int j = 0; j < stopWords.Count(); j++)
{
input_Text[i] = input_Text[i].Replace(stopWords[j]," ");
}
}
试试这个:
string[] result = input_Texts.Except(stopWords).ToArray();
也可以这样做:
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 中的每个文本并从中删除所有停用词。
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.");
}
}
}
}
我有一个停用词字符串数组和输入文本字符串数组,即
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();
现在,我必须使用这些停用词数组从 input_Texts 数组中删除。 我使用了以下技术但没有工作,在访问两个数组索引时很奇怪。例如,在 input_Texts 数组的索引 0 处获取第一个文本,即
input_Texts[0]
然后匹配 stopWords 数组中的所有单词字符串即
// have to match all the indexes of stopWords[] with input_Texts[0]
stopWords[]
然后在从 input_Texts
数组的索引 0 文本中删除所有 stopWords
之后,必须对 input_Texts 数组中的所有文本重复它。
任何建议和经过修改的代码示例将不胜感激并予以确认。
谢谢。
您可以使用 Linq 来执行此操作
//string[] input_Text = new string[] { "Ravi Kumar", "Ravi Kumar", "Ravi Kumar" };
//string[] stopWords = new string[] { "Ravi" };
for(int i=0;i<input_Text.Count();i++)
{
for (int j = 0; j < stopWords.Count(); j++)
{
input_Text[i] = input_Text[i].Replace(stopWords[j]," ");
}
}
试试这个:
string[] result = input_Texts.Except(stopWords).ToArray();
也可以这样做:
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 中的每个文本并从中删除所有停用词。
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.");
}
}
}
}