main2.go 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "log"
  6. "regexp"
  7. "sort"
  8. "strings"
  9. "golang.org/x/net/html"
  10. )
  11. // SplitTextByChinesePunctuation splits the input text by Chinese punctuation and spaces.
  12. func SplitTextByChinesePunctuation2(text string) []string {
  13. // Regular expression pattern for Chinese punctuation and spaces
  14. pattern := `[,。!?、;:]|\s+`
  15. re := regexp.MustCompile(pattern)
  16. // Split the text by the pattern
  17. parts := re.Split(text, -1)
  18. // Filter out empty strings resulting from split
  19. var result []string
  20. for _, part := range parts {
  21. trimmed := strings.TrimSpace(part)
  22. if trimmed != "" {
  23. result = append(result, trimmed)
  24. }
  25. }
  26. return result
  27. }
  28. // RemoveDuplicates removes duplicates from a sorted slice.
  29. func RemoveDuplicates2(strs []string) []string {
  30. if len(strs) == 0 {
  31. return strs
  32. }
  33. sort.Strings(strs)
  34. j := 0
  35. for i := 1; i < len(strs); i++ {
  36. if strs[j] != strs[i] {
  37. j++
  38. strs[j] = strs[i]
  39. }
  40. }
  41. return strs[:j+1]
  42. }
  43. // CleanHTMLTags removes all HTML tags from the input HTML string and returns the plain text.
  44. func CleanHTMLTags2(htmlContent string) (string, error) {
  45. doc, err := html.Parse(strings.NewReader(htmlContent))
  46. if err != nil {
  47. return "", err
  48. }
  49. var buf bytes.Buffer
  50. var f func(*html.Node)
  51. f = func(n *html.Node) {
  52. if n.Type == html.TextNode {
  53. buf.WriteString(n.Data)
  54. }
  55. for child := n.FirstChild; child != nil; child = child.NextSibling {
  56. f(child)
  57. }
  58. }
  59. f(doc)
  60. // Remove leading and trailing white space
  61. trimmedText := strings.TrimSpace(buf.String())
  62. return trimmedText, nil
  63. }
  64. func main2() {
  65. htmlContent := `
  66. <br/> <br/> <b></b> <br/> <b>致各潜在供应商:</b> <br/> 按照公司车辆使用计划,现需采购商务车一辆。请各位潜在供应商参加我司北京办公区行政车辆的谈判采购。现就有关事宜告知如下: <b>1.</b><b>采购需求</b><b></b> <br/> <br/> <table border=\"0\"> <tbody> <tr> <td v=\"\"> <br/> <b>物资名称</b><b></b> </td> <td v=\"\"> <br/> <b>规格型号</b><b></b> </td> <td v=\"\"> <br/> <b>计量单位</b><b></b> </td> <td v=\"\"> <br/> <b>暂定数量</b><b></b> </td> <td v=\"\"> <br/> <b>备注</b><b></b> </td> </tr> <tr> <td v=\"\"> <br/> 商务用车 </td> <td v=\"\"> <br/> 别克GL8 </td> <td v=\"\"> <br/> 辆 </td> <td v=\"\"> <br/> 1 </td> <td v=\"\"> <br/> 排气量3.0升以下 </td> </tr> </tbody> </table> <b>2.付款方式</b><b></b> <br/> 谈判结束,与中标单位签订合同后,付100%预付款。 3.<b>投标人资格要求:</b><b></b> <br/> <b>3.1 </b><b>基本资质</b>:4S店需要具备合法的经营凭证和资格,具备企业营业执照、税务登记证等。以及获得汽车品牌的授权,包括销售、使用店铺名称、商标、标识等。 <br/> <b>3.2 </b><b>销售和售后服务体系:</b>需要建立完善的汽车销售和售后服务体系,保证相应的配件供应,提供及时、有效的售后服务。严格遵守家用汽车产品“三包”、召回等规定,确保消费者合法权益。 <br/> <br/> <b>3.3 </b><b>信用要求:</b>未被“信用中国”网站列入失信被执行人、重大税收违法案件当事人名单、政府采购严重违法失信行为记录名单。近两年内在中交(厦门)电子商务有限公司无不良行为记录。 <b>4.采购资料的获取:</b><b></b> <br/> 采购人于2024年12月27日至2025年1月2日,通过中交集团交融智链平台发布采购公告。请有意参与投标单位参与响应。 <br/> 报价方式:请各意向投标人将加盖公章的报价单在1月2日16时前发送至邮箱:zhanghan@ccccltd.cn。 <b>5.发布公告的媒介:</b><b></b> <br/> 本次采购公告在中交集团交融智链平台上公开发布。 <b>6.采购人信息:</b><b></b> <br/> ·<b>联系人</b>:张女士 <br/> ·<b>联系电话</b>:13701077123 <br/> <br/> 中交(厦门)电子商务有限公司 <br/> 2024年12月27日
  67. `
  68. plainText, err := CleanHTMLTags(htmlContent)
  69. if err != nil {
  70. fmt.Println("Error:", err)
  71. return
  72. }
  73. fmt.Println(plainText)
  74. characterArray := SplitTextByChinesePunctuation(plainText)
  75. uniqueArray := RemoveDuplicates(characterArray)
  76. for k, v := range uniqueArray {
  77. log.Println(k, v)
  78. }
  79. log.Println(len(characterArray), len(uniqueArray))
  80. }