iT邦幫忙

0

利用 C# 寫斷句系統

匿名 2012-08-08 23:28:525203 瀏覽
  • 分享至 

  • xImage

最近我正在學C#
我想要寫一個斷句系統
請問 有人可以指導我一下嗎?
我一直使用replace 取代 <br>
但是似乎得我到 我想要的結果

我想要的結果例如:
輸入:你好嗎?我很好,那你呢?有空再聊囉。掰!
輸出:
你好嗎?
我很好,
那你呢?
有空再聊囉。
掰!

外獅佬 iT邦大師 1 級 ‧ 2012-08-09 00:07:26 檢舉
你要的是...去解析那些標點符號...用這些你要的標點符號...
例如...問號、驚嘆號、句號等等...然後去拆解字串...拆成一個陣列或是...List什麼來著..
接著...想怎麼輸出都行...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
wiseguy
iT邦超人 1 級 ‧ 2012-08-09 00:09:37

用 Regular Expression 幾乎一行程式就搞定了。以下是 php 程式範例:

&lt;pre class="c" name="code">&lt;?php
$t = '你好嗎?我很好,那你呢?有空再聊囉。掰!';
$result = preg_split('/(?|,|\?|。|!)/', $t, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
var_dump($result);
/*
輸出結果
array(10) {
  [0]=>
  string(6) "你好嗎"
  [1]=>
  string(2) "?"
  [2]=>
  string(6) "我很好"
  [3]=>
  string(2) ","
  [4]=>
  string(6) "那你呢"
  [5]=>
  string(1) "?"
  [6]=>
  string(10) "有空再聊囉"
  [7]=>
  string(2) "。"
  [8]=>
  string(2) "掰"
  [9]=>
  string(1) "!"
}
*/
?>

你可以用 C# 改寫。

外獅佬 iT邦大師 1 級 ‧ 2012-08-09 00:12:36 檢舉

暈...這個帥氣.....哈哈

正所謂
RE寫得好,帥氣帥到老
拍手拍手拍手

4
timloo
iT邦研究生 2 級 ‧ 2012-08-09 09:36:15

這備例子蠻實用的,
剛好是逗點符號來斷句,
拿來做內部交流的例子(同事幾乎都是拿網路現成的樣式例子在用,這種例子,沒現成的樣式,但又不會太困難)
現實中,應該還會有一些space,tab,newline的分隔符號,
真是一個好例子,
用一般程式不好寫(string function) ,用正規式輕易就解決了!

匿名 檢舉

iT邦幫忙MVPwiseguy提到:
Regular Expression

如何使用正規式呢?

小成 iT邦高手 10 級 ‧ 2012-08-12 17:13:12 檢舉
0
JamesDoge
iT邦高手 1 級 ‧ 2022-12-25 00:47:54

用 Regular Expression, C# 改寫後:

輸入:你好嗎?我很好,那你呢?有空再聊囉。掰!

string t = "你好嗎?我很好,那你呢?有空再聊囉。掰!";
string pattern = "(?|,|\\?|。|!)";
MatchCollection matches = Regex.Matches(t, pattern);
int lastIndex = 0;

foreach (Match m in matches)
{
    Console.WriteLine(t.Substring(lastIndex, m.Index - lastIndex + m.Length));
    lastIndex = m.Index + m.Length;
}

// 輸出最後一段字符串
if (lastIndex < t.Length)
{
    Console.WriteLine(t.Substring(lastIndex));
}

輸出:

你好嗎?
我很好,
那你呢?
有空再聊囉。
掰!

我要發表回答

立即登入回答