【RidgeUI AI+系列】中文重復統計器

中文重復統計器

在這里插入圖片描述
文字重復統計是一個使用文本處理工具, 輸入文本內容并指定最小詞長度后, 就能自動高亮顯示重復的詞。 本教程將會借助AI實現這個應用的開發

頁面腳本編寫

該工具的基礎流程較為清晰:用戶輸入一段文字后,調用提取算法處理重復詞匯,據此可提出以下問題

提問 (Round 1)

 export default {name: 'HighlightText',state: {originalText: '', // 需要處理的文本textMinLenth: 2, // 最小詞長度duplicated: [], // 重復的單詞},actions: {extractText () { // 提取重復文本}}
}

上述腳本實現extractText方法 對state.originalText 提取出重復的文本,根據textMinLenth
最小詞長度(最小為2) 將結果寫入duplicated, 每項包含結果詞及高亮顏色(要求不同)。
同時統計文本換行、符號、和字符數也寫入state

返回

extractText() {// 重置狀態this.state.duplicated = [];// 統計換行符數量const lineCount = (this.state.originalText.match(/\n/g) || []).length;// 統計符號數量(非字母、數字、空格和換行符)const symbolCount = (this.state.originalText.match(/[^a-zA-Z0-9\s\n]/g) || []).length;// 統計字符總數(包括空格和換行符)const charCount = this.state.originalText.length;// 更新統計信息this.state.lineCount = lineCount;this.state.symbolCount = symbolCount;this.state.charCount = charCount;// 提取單詞并統計詞頻const words = this.state.originalText.toLowerCase().match(/[a-z0-9]+/g) || [];const wordCount = {};words.forEach(word => {if (word.length >= this.state.textMinLenth) {wordCount[word] = (wordCount[word] || 0) + 1;}});// 找出重復的單詞const duplicatedWords = Object.entries(wordCount).filter(([word, count]) => count > 1).map(([word, count]) => word);// 為每個重復的單詞分配不同的高亮顏色const colors = ['rgba(255, 99, 132, 0.5)', // 紅色'rgba(54, 162, 235, 0.5)', // 藍色'rgba(255, 206, 86, 0.5)', // 黃色'rgba(75, 192, 192, 0.5)', // 綠色'rgba(153, 102, 255, 0.5)', // 紫色'rgba(255, 159, 64, 0.5)', // 橙色'rgba(231, 233, 237, 0.5)'  // 灰色];// 為每個重復的單詞創建對象,包含單詞和顏色this.state.duplicated = duplicatedWords.map((word, index) => ({word,color: colors[index % colors.length]}));
}

AI迅速理解了需求并在短時間內給出了算法結果。遺憾的是,該算法無法有效提取中文內容。
在這里插入圖片描述
通過分析結果可以看出,該工具在處理重復內容時采用了與英文相同的邏輯,將空格或標點作為單詞分隔的依據。然而,這種處理方式并不適用于中文(事實上,使用國外的重復檢測工具也會得出相同結論)。

提問 (Round 2)

就這個問題再次提問后,AI回答

你指出的問題很關鍵,中文文本的分詞確實需要特殊處理。之前的實現依賴空格來分割單詞,這對中文無效。我將修改代碼,使用更適合中文的分詞方式。

同時它還說

這個實現應該能滿足中文文本的重復詞統計需求。如果你需要更復雜的中文分詞(例如按詞語而不是單字),可能需要集成專門的中文分詞庫,如 jieba 或 segmentit。

中文分詞確實是一個專門的領域。盡管如此,我還是嘗試用改進后的算法,但早已預料到效果可能不佳。果然,算法未能正確統計中文內容。通過觀察發現,AI在處理時出現了顧此失彼的問題:將每個中文字符都視為獨立單詞,再加上最小長度的限制條件,最終導致統計失敗。

提問 (Round 3)
我繼續提問:

上述算法,中文也是要求大于最小長度才納入統計的,不能把每個字作為一個詞

然后AI回答

你是對的,我之前的實現錯誤地將每個中文字符單獨作為一個詞統計了。現在我將修改代碼,讓中文和英文都遵循 textMinLenth 的限制,按連續字符作為詞進行統計。

返回的代碼仍存在準確性不足的問題。我發現它先進行了分詞操作再進行統計,而該算法在實際應用中難以奏效。至此,我確實感到有些失望,但仍需進一步給出提示。

提問 (Round 4)
提問:

我想要的是先統計重復,例如 你好會匹配所有你好。 而不是先分詞出你好

這一次終于有了轉機,因為他提到了一個我之前從未聽說的算法——滑動窗口。光是這個名字,就讓我覺得很有希望。于是我試著輸入了一段中文來測試效果。
在這里插入圖片描述
觀察發現,統計結果并非完全準確。例如,4%的球員與4%與%的球員存在重復統計的情況。盡管如此,總體而言,該結果仍具有相當的準確度。

提問 (Round 5)

為了安慰它,這次我說

基本正確了。 但是還有2個問題: 1、中文的逗號、句號等符號不能作為重復統計。 2、還存在一個長字符串 會匹配到2個不同短的字符串的情況。 這看起來無法避免, 能否將算法調整為統計作為重復后, 內容就不參加其他的重復統計了

很幸運的是AI也完全理解了問題

我理解了你的需求,現在需要解決兩個關鍵問題:排除中文標點符號的干擾,以及避免重復統計重疊的文本片段。這需要更復雜的匹配策略和后處理邏輯。

雖然理解,但AI給出的算法仍然無法滿足要求。

提問 (Round 6)

還是計算不出結果。 還不如最早的幾個版本。 是否可以這樣, 首先將中文標點替換為空格,然后對中文字符使用滑動窗口算法, 并且空格就默認為分詞標志

這回終于, 它給出了一個還不錯的算法

extractText() {// 重置狀態this.state.duplicated = []// 統計換行符數量const lineCount = (this.state.originalText.match(/\n/g) || []).length// 統計符號數量(非字母、數字、中文、空格和換行符)const symbolCount = (this.state.originalText.match(/[^a-zA-Z0-9\u4e00-\u9fa5\s\n]/g) || []).length// 統計字符總數(包括空格和換行符)const charCount = this.state.originalText.length// 更新統計信息this.state.lineCount = lineCountthis.state.symbolCount = symbolCountthis.state.charCount = charCount// 預處理:將中文標點替換為空格const punctuationRegex = /[\u3000-\u303F\uFF00-\uFF60\uff0c\uff1a\uff1b\uff01\uff1f\uff0e]/gconst processedText = this.state.originalText.replace(punctuationRegex, ' ')// 提取所有可能的子串并統計頻率const substrCount = {}const minLength = Math.max(2, this.state.textMinLenth) // 確保最小長度至少為2// 按空格分割文本為單詞數組const words = processedText.split(/\s+/)// 對每個單詞使用滑動窗口提取所有可能的子串words.forEach(word => {if (!word) return // 跳過空單詞// 提取所有長度 >= minLength 的子串for (let i = 0; i < word.length; i++) {for (let j = i + minLength; j <= word.length; j++) {const substr = word.substring(i, j)substrCount[substr] = (substrCount[substr] || 0) + 1}}})// 找出重復的子串(出現次數 > 1),按長度降序排列const duplicatedSubstrs = Object.entries(substrCount).filter(([substr, count]) => count > 1).sort((a, b) => b[0].length - a[0].length)// 篩選最終結果,避免重疊const filteredSubstrs = []duplicatedSubstrs.forEach(([substr, count]) => {// 檢查是否已被更長的子串包含if (!filteredSubstrs.some(s => s.includes(substr) && s !== substr)) {filteredSubstrs.push(substr)}})// 為每個重復的子串分配不同的高亮顏色const colorVariations = ['#F53F3F', // semi-red-6'#EB2F96', // semi-pink-6'#722ED1', // semi-purple-6'#5B32C9', // semi-violet-6'#2F54EB', // semi-indigo-6'#1890FF', // semi-blue-6'#0FC6C2', // semi-light-blue-6'#00B42A', // semi-green-6'#7CB305', // semi-lime-6'#FACC14', // semi-yellow-6'#FF7D00' // semi-orange-6]    // 為每個重復的子串創建對象,包含text和style屬性this.state.duplicated = filteredSubstrs.map((substr, index) => ({text: substr,style: {backgroundColor: colorVariations[index % colorVariations.length],color: '#fff',padding: 4}}))}

頁面制作

我將Bootstrap的多行輸入和高亮組件整合到頁面中,并設置按鈕點擊時觸發提取算法功能。 每次算法給出結果后,都可以快速驗證。

具體配置如下:
多行輸入:取值連接到”需要處理的文本“
高亮組件:內容連接到”需要處理的問題“, 高亮文本連接到”重復的單詞“

為了顯示哪些詞匯重復了,需要放入一個列表組件, 數據就連接到”重復的單詞“,在里面放入彈性容器/文本,
為頁面腳本庫增加計算2個字段如下,

...computed: {itemWordText: scope => scope.item.text, // 重復單項文本itemBackgroundColor: scope => scope.item.style.backgroundColor // 單項背景顏色}
...
}

將列表內的文本的內容和背景顏色分別連接到這2個字段 。這樣提取后右側會顯示重復詞列表

在這里插入圖片描述
最后,增加一個watch字段,使得用戶修改文本時,直接進行統計無需再點擊按鈕。將之前按鈕刪除

  watch: {originalText () {this.extractText()}},

最后,調整和美化整個頁面布局 這個工具就算制作好了

小結

  1. 相比之前的密碼生成器,這款統計重復算法的AI經過多次交互優化,最終呈現出令人滿意的效果。
  2. 從功能設計的角度來看,這個需求對人類程序員而言通常無需多次解釋。人類開發者完成編寫后,能夠自行驗證結果是否符合需求。但人工智能在這方面的能力明顯欠缺,需要反復澄清和細化具體要求。
  3. 當AI輸出結果不符合預期時,有些問題可以直接通過結果反饋發現,但有些需要深入代碼層面才能識別。這就要求使用者具備一定的代碼閱讀和理解能力,才能有效引導AI進行調整。從這個角度來看,AI更像是輔助工具而非開發的主導者。
  4. 保持耐心尤為關鍵
    當算法多次輸出錯誤結果時,我的做法是明確指出初始版本更合適,并引導它僅針對特定方面進行調整。這很關鍵,因為雖然條條大路通羅馬,但人類通常更擅長找到更合理且復雜度更低的解決方案路徑。

最后的最后,從效率上來說,雖然多次提示并花時間去閱讀生成代碼給出解決建議,但AI整體輸出速度還是比我要快,并且更加省心。

大家可以通過這個地址訪問應用,
https://ridgeui.com/npm/ridge-duplicate/
或者通過設計器打開自己更改和驗證
https://ridgeui.com/npm/ridge-editor/?import=ridge-duplicate

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86945.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86945.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86945.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄|圖論|05島嶼數量(深搜DFS)

leetcode:99. 島嶼數量 題目 題目描述&#xff1a; 給定一個由 1&#xff08;陸地&#xff09;和 0&#xff08;水&#xff09;組成的矩陣&#xff0c;你需要計算島嶼的數量。島嶼由水平方向或垂直方向上相鄰的陸地連接而成&#xff0c;并且四周都是水域。你可以假設矩陣外均…

數據結構-第二節-堆棧與隊列

一、概念&#xff1a; 堆棧與隊列也是線性表&#xff0c;但是&#xff1a; 堆棧&#xff1a;只能在一個端進行插入刪除&#xff0c;此端稱為棧頂。&#xff08;特點&#xff1a;后來居上&#xff09; 隊列&#xff1a;在一端進行插入&#xff08;隊尾&#xff09;&#xff0…

HarmonyNext動畫大全02-顯式動畫

HarmonyOS NEXT顯式動畫詳解 1. 核心接口 顯式動畫通過animateTo接口實現&#xff0c;主要特點包括&#xff1a; 觸發方式&#xff1a;需主動調用接口觸發動畫 參數配置 &#xff1a; animateTo({duration: 1000, // 動畫時長(ms)curve: Curve.Ease, // 動畫曲線delay: 200…

芯谷科技--高壓降壓型 DC-DC 轉換器D7005

在當今電子設備日益復雜且對電源性能要求極高的背景下&#xff0c;一款高效、穩定的電源管理芯片至關重要。 D7005憑借其卓越的性能和廣泛的應用適配性&#xff0c;成為眾多工程師在設計電源方案時的優選。 產品簡介 D7005 是一款高效、高壓降壓型 DC-DC 轉換器&#xff0c;具…

MySQL的GTID詳解

GTID&#xff08;Global Transaction Identifier&#xff0c;全局事務標識符&#xff09;是MySQL 5.6及以上版本引入的重要特性&#xff0c;用于在主從復制環境中唯一標識每個事務&#xff0c;簡化復制管理、故障轉移和數據一致性維護。以下從多維度詳細介紹GTID&#xff1a; …

專題:2025中國游戲科技發展研究報告|附130+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p42756 本報告匯總解讀基于艾瑞咨詢《2025中國游戲科技發展白皮書》、伽馬數據《2025年1-3月中國游戲產業季度報告》、嘉世咨詢《2025中國單機游戲市場現狀報告》等多份行業研報數據。當《黑神話&#xff1a;悟空》以虛幻引擎5復刻東…

【數據挖掘】數據挖掘綜合案例—銀行精準營銷

要求&#xff1a; 1、根據相關的信息預測通過電話推銷&#xff0c;用戶是否會在銀行進行存款 2、數據bank.csv&#xff0c;約4520條數據&#xff0c;17個屬性值 提示&#xff1a; 17個屬性&#xff0c;分別是年齡&#xff0c;工作類型&#xff0c;婚姻狀況&#xff0c;受教育…

postgresql查看鎖的sql語句

發現一個查看postgresql鎖比較好的sql語句&#xff0c;參考鏈接地址如下 鏈接地址 查看鎖等待sql witht_wait as(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.trans…

JSON 格式詳解

JSON 格式詳解 隨著互聯網的發展和各種 Web 應用程序的普及&#xff0c;數據交換已經成為了我們日常開發中的重要環節。而在各種數據交換格式中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作為一種輕量級的數據交換格式&#xff0c;以其簡潔、易于閱…

原型設計Axure RP網盤資源下載與安裝教程共享

對于初學者來說&#xff0c;我們熟悉一下其定義&#xff1a;?Axure RP是一款常用的快速原型設計工具?&#xff0c;主要用于創建應用軟件或Web網站的線框圖、流程圖、原型和規格說明文檔&#xff0c;廣泛應用于產品經理、UI/UX設計師等專業領域。?? 主要用戶群體&#xff1…

iframe嵌套 redirect中轉頁面 route跳轉

需求是項目A要使用iframe內嵌項目B的頁面&#xff0c; 由于需要嵌套的頁面很多&#xff0c;每個頁面路徑和參數又各不相同&#xff0c; 所以我們在項目B里做了一個中轉頁面&#xff0c;這樣就能自己掌控項目A傳遞過來的東西了&#xff1b; routes.js 增加一個菜單&#xff1a;…

IP數據報 封裝成 MAC幀 ( 目的MAC地址6B 源MAC地址6B 類型2B 數據部分 FCS校驗和4B )

將 IP 數據報&#xff08;Internet Protocol Datagram&#xff09;封裝成 MAC 幀 需要在數據鏈路層添加適當的頭部信息&#xff0c;以便在局域網內進行傳輸。這個過程涉及將網絡層&#xff08;IP 層&#xff09;的數據通過數據鏈路層&#xff08;MAC 層&#xff09;封裝成適合物…

Note2.4 機器學習:Batch Normalization Introduction

Batch Normalization&#xff08;批標準化&#xff0c;BN&#xff09;通過標準化數據的操作&#xff0c;使得損失函數的優化地形&#xff08;optimization landscape&#xff09;更加平滑&#xff0c;從而達到更好地訓練效果。BN常用于卷積神經網絡&#xff08;CNN&#xff09;…

IDEA在AI時代的智能編程實踐:從工蜂到通義靈碼的效能躍遷??

引言? 在騰訊云工作期間&#xff0c;我曾使用?工蜂的AI代碼補全功能&#xff0c;結合IntelliJ IDEA&#xff08;以下簡稱IDEA&#xff09;極大提升了開發效率。如今離開騰訊云&#xff0c;面對外部開發環境&#xff0c;如何繼續利用AI提升編碼效率&#xff1f;本文將系統梳理…

MySQL 慢查詢日志詳解

慢查詢日志&#xff08;Slow Query Log&#xff09;是 MySQL 提供的一種核心性能優化工具&#xff0c;用于記錄執行時間超過指定閾值的 SQL 語句。通過分析這些日志&#xff0c;可以定位數據庫性能瓶頸&#xff0c;優化低效查詢&#xff0c;提升系統整體效率。 一、慢查詢日志的…

UV安裝Python指南總結

UV安裝Python指南總結 UV是一個Python包管理工具,它可以幫助我們安裝和管理Python版本。以下是關于UV安裝Python的主要功能和用法總結。 基本使用 安裝最新版Python uv python install注意&#xff1a;UV使用Astral的python-build-standalone項目提供的Python發行版,而不是…

運維基礎-MYSQL數據庫-筆記

序 欠10年前自己的一份筆記&#xff0c;獻給今后的自己。 數據庫介紹 數據的時代 涉及的數據量大數據不隨程序的結束而消失數據被多個應用程序共享大數據 數據庫的發展史 萌芽階段&#xff1a;文件系統 使用磁盤文件來存儲數據初級階段&#xff1a;第一代數據庫 出現了網狀…

從GPTs到Real智能體:目前常見的幾種創建智能體方式

文章目錄 智能體的三個發展階段低階智能體(面向過程) VS 高階智能體(面向目標)主流智能體創建平臺實踐基礎型平臺cherry-studio豆包訊飛星火騰訊元器 高階智能體開發體系cline開發套件Coze平臺Dify開源框架Manus突破性方案 技術演進趨勢總結 智能體的三個發展階段 當前智能體技…

WPF 實現自定義數字輸入彈窗

1.前端代碼實現 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品識別系統flask

查看完整項目包點擊文末名片 項目簡介 本項目 基于YOLO的海洋垃圾物品識別系統 旨在利用深度學習中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;實現對海洋垃圾的自動識別與分類。通過構建一個基于Flask的Web應用&#xff0c;用戶可以方便地上傳圖片&…